2013-03-12 3 views
8
var obj = new MyObject(); 

मुझे RestSharp RestRequest.AddBody(obj) प्राप्त करने में कोई समस्या है; ऑब्जेक्ट को सही ढंग से क्रमबद्ध करने के लिए।RestSharp RestRequest.AddBody न्यूटन का उपयोग नहीं कर रहा है। जेसन विशेषता

class MyObject 
{ 
    [JsonProperty(PropertyName="a")] 
    public A{get;set;} 

    [JsonProperty(PropertyName="b")] 
    public B{get;set;} 
} 

समस्या AddBody serializer खाता मेरी JsonProperty विशेषताओं को ध्यान में रखकर नहीं किया जाता है और मैं यह पता लगाने की RestRequest या RestClient पर serializer स्थापित करने के लिए कैसे लग सकता है?

+0

क्या आपको यह वैश्विक स्तर पर सेट करने का कोई तरीका मिला है, न कि प्रति अनुरोध? – NilsH

+0

एक ही दृष्टिकोण काम करेगा यदि ग्राहक के खिलाफ व्यक्तिगत अनुरोध के बजाय लागू किया गया था, लेकिन मेरे मामले में मैं नहीं चाहता था कि व्यवहार सभी अनुरोधों के माध्यम से कैस्केड हो, केवल विशेष उदाहरण जिन्हें रिपोजिटरी ऑब्जेक्ट कॉन्फ़िगरेशन और एपीआई के संस्करण के बीच एक-ऑफ प्रोजेक्शन की आवश्यकता होती है वस्तु का। – tafaju

+1

यह प्राप्त करने के लिए ग्राहक पर आप कौन सी विधि/संपत्ति सेट करते हैं? मुझे पता है कि मैं एक डिफ़ॉल्ट 'deserializer' जोड़ने के लिए' AddHandler' का उपयोग कर सकता हूं, लेकिन मुझे यह नहीं पता कि डिफ़ॉल्ट 'serializer' – NilsH

उत्तर

3

डिफ़ॉल्ट ओवरराइड करने के लिए निम्न वर्ग कार्यान्वित मैं tafaju का एक जवाब का इस्तेमाल किया और इस तरह json के लिए मेरे serializer लागू किया है।

public class CustomJsonSerializer : ISerializer 
{ 
    public CustomJsonSerializer() 
    { 
     ContentType = "application/json"; 
    } 

    public string Serialize(object obj) 
    { 
     return JsonConvert.SerializeObject(obj); 
    } 

    public string RootElement { get; set; } 

    public string Namespace { get; set; } 

    public string DateFormat { get; set; } 

    public string ContentType { get; set; } 

} 

और यह मेरे लिए पूरी तरह से काम करता है, यह गुण पढ़ता है और सही ढंग से सभी प्रकार serializes। लेकिन मैंने इसे सभी प्रकार के साथ परीक्षण नहीं किया। प्रलेखन का कहना है कि रूट एलीमेंट, नेमस्पेस, डेटफॉर्मैट का उपयोग जेसन के लिए नहीं किया जाता है।

5

मैं दिए गए लिंक जो विशेषता समर्थन RestSharp Deserialization

की कमी की समस्या का समाधान हो ओवरराइड डिफ़ॉल्ट serializers

जब XML या JSON अनुरोध निकायों के साथ अनुरोध करने के लिए, आप करने के लिए ISerializer का अपना स्वयं का कार्यान्वयन निर्दिष्ट कर सकते हैं पाया उपयोग।

var request = new RestRequest(); 
request.RequestFormat = RequestFormat.Xml; 
request.XmlSerializer = new SuperXmlSerializer(); // implements ISerializer 
request.AddBody(person); // object serialized to XML using your custom serializer; 

और JsonSerializer New Json Serializer

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