2012-06-05 17 views
14

क्लाइंट पक्ष औपचारिक JSON सामग्री "{\"Id\":[1,2,3],\"Size\":56}" प्राप्त करता है, लेकिन बाइट सरणी deserialization में एक त्रुटि प्राप्त करें।RestSharp JSON सामग्री को deserialize (किसी ऑब्जेक्ट का प्रतिनिधित्व एक बाइट सरणी है) त्रुटि

1 त्रुटि नीचे

IRestResponse<key> response = client.Execute<key>(request); 

2 त्रुटि संदेश बयान में होता है "कोई parameterless निर्माता इस वस्तु के लिए परिभाषित किया है।"

public class key 
{ 
    public byte[] id { get; set; } 
    public int Size { set; get; } 
} 

4 मैं उद्देश्य यह है कि JSON प्रारूप द्वारा स्ट्रिंग और पूर्णांक होता है और है कि सब ठीक है लेकिन बाइट सरणी है गुजर की कोशिश की है:

3 ग्राहक आकार में वस्तु वर्ग के रूप में यह सर्वर साइड में है एक ही है।

उत्तर

23

मैंने भी इस मुद्दे में भाग लिया है।

var response = client.Execute(request); 
var keyResponse = JsonConvert.DeserializeObject<key>(response.Content); 

keyResponse अब अपने प्रमुख JSON सामग्री से deserialized वर्ग का एक उदाहरण होना चाहिए: मेरा समाधान RestSharp उपयोग करने के लिए एक कच्चे प्रदर्शन करने के लिए निष्पादित और Json.NET का उपयोग परिणाम deserialize करने के लिए किया गया था।

36

रेस्टशर्प से जेसनडेसरियलज़र सरणी को deserialize नहीं कर सकता है। byte[] के बजाय List<byte> का उपयोग करें। अधिक जानकारी के लिए देख https://github.com/restsharp/RestSharp/wiki/Deserialization

+0

यह मेरे साथ भी हुआ, मुझे अंत में पता चला कि मैंने अपनी कक्षाओं में से एक में एक पिस्की स्ट्रिंग सरणी डाली थी। इसे सूची में बदलकर तुरंत समस्या ठीक हो गई और सभी परीक्षण गुजरने लगे। – jamesbar2

0

क्रिस होगन के उत्तर के लिए इसके अलावा, मैं कहना है कि मैं इस त्रुटि जब RestSharp गलत तरीके से डिफ़ॉल्ट serializer के बजाय कस्टम JSON.NET serializer मैं सौंपा था इस्तेमाल किया मिल गया चाहते हैं।

इसका कारण यह था कि मैंने सामग्री प्रकार application/json के साथ एक हैंडलर जोड़ा जबकि एपीआई मुझे सामग्री को text/json के रूप में वापस करने से प्रतिक्रिया प्राप्त हो रही थी।

तो AddHandler को बदलकर AddHandler("text/json", jsonDeserializer) पर कॉल करके, मैंने इस मुद्दे को हल किया।