2013-11-15 5 views
12

RestSharp का अंतर्निहित JSON serializer किसी ऑब्जेक्ट की सभी गुणों को क्रमबद्ध करता है, भले ही वे शून्य हों या अन्यथा डिफ़ॉल्ट मान हों। मैं इन गुणों को कैसे छोड़ सकता हूं?RestSharp: जेएसओएन को शून्य मानों को क्रमबद्ध करने के लिए कैसे छोड़ें?

+1

जेसन.NET का ऐसा पैरामीटर है। 'JsonSerializerSettings.NullValueHandling = NullValueHandling.Ignore' ... restSharp – thenewseattle

उत्तर

1

यहां एक ऐसे संस्करण का लिंक है जिसे शून्य मानों को अनदेखा करने के लिए संशोधित किया गया है। आपको नल को अनदेखा करने के लिए केवल सीरिएलाइज़र विकल्पों को सेट करने की आवश्यकता है।

Restsharp that ignores null values

5

एक वैकल्पिक, आपको पहले उसे क्रमानुसार करने जो शून्य मान अनदेखी का समर्थन अन्य json पुस्तकालयों (json.net, servicestack.text, आदि) का उपयोग कर सकते हैं:

RestRequest request = new RestRequest(); 
... 
string jsonString = ThirdPartySerialization(jsonObject); 
request.AddParameter("application/json", jsonString, ParameterType.RequestBody); 
3

आप उपयोग कर सकते हैं एक कस्टम IJsonSerializerStrategy डिफ़ॉल्ट मानों को अनदेखा करने के लिए डिफ़ॉल्ट SimpleJson JSON serializer के साथ।

ऐसा करने का सबसे आसान तरीका नीचे PocoJsonSerializerStrategy का विस्तार करना है।

public class IgnoreNullValuesJsonSerializerStrategy : SimpleJson.PocoJsonSerializerStrategy 
{ 
    protected override bool TrySerializeUnknownTypes(object input, out object output) 
    { 
     bool returnValue = base.TrySerializeUnknownTypes(input, out output); 

     if (output is IDictionary<string, object> obj) 
     { 
      output = obj.Where(o => o.Value != null).ToDictionary(o => o.Key, o => o.Value); 
     } 

     return returnValue; 
    } 
} 

और फिर इसे डिफ़ॉल्ट धारावाहिक रणनीति के रूप में उपयोग करें।

SimpleJson.SimpleJson.CurrentJsonSerializerStrategy = new IgnoreNullValuesJsonSerializerStrategy(); 
+0

इसके बारे में धन्यवाद, लेकिन वर्तमान में RestSharp के वर्तमान संस्करण के साथ कम से कम 106.1.0 के रूप में काम नहीं कर रहा है, वर्तमान में समस्या पर प्रतीक्षा कर रहा है: https: // github। कॉम/restsharp/RestSharp/मुद्दों/1018 उम्मीद है कि एक बार हल हो जाने पर यह फिर से काम करेगा या कम से कम कुछ समान होगा। –

+0

@JamesEby यह गलत है। यह समाधान अभी भी काम करता है और आपके द्वारा उल्लिखित मुद्दे से संबंधित नहीं है। मैंने जो समाधान पोस्ट किया है वह सीरियलाइज़र रणनीति को स्थिर सरल जेसन क्लास पर सीधे कॉन्फ़िगर करता है जो RestSharp का उपयोग करता है और इस प्रकार RestSharp में सीमित कॉन्फ़िगरेशन विकल्पों से प्रभावित नहीं होता है। आधिकारिक दस्तावेज़ीकरण में यह भी उल्लेख किया गया है कि इस तरह की धारावाहिक रणनीति को अनुकूलित करना संभव है (इस पृष्ठ के निचले हिस्से में): https://github.com/restsharp/RestSharp/wiki/Deserialization – Conyc

+0

मैं जो कह रहा हूं वह है वह स्थैतिक वर्ग अब कोड में मौजूद नहीं है, या कम से कम ऐसा लगता है कि इसे हटा दिया गया है। मुझे नवीनतम संस्करण के रूप में RestSharp में ऐसी कोई SimpleJson कॉन्फ़िगरेशन क्लास नहीं मिल सका। अगर मैं गलत हूं और आप इसे अभी भी देखते हैं तो कृपया मुझे बताएं। –

संबंधित मुद्दे