लागू करने वाले कस्टम संग्रह का जेसननेट सीरियलाइजेशन मेरे पास एक संग्रह कक्षा है जो आईनेमरेबल लागू करती है और मुझे इसके क्रमबद्ध संस्करण को deserializing में परेशानी हो रही है। मैं Json.net वी 4.0.2.13623आईएनमेर्यूरेबल <T>
यहाँ उपयोग कर रहा हूँ जब मैं यह क्रमानुसार मैं निम्नलिखित json मिलता जो कि मेरी समस्या
public class MyType
{
public int Number { get; private set; }
public MyType(int number)
{
this.Number = number;
}
}
public class MyTypes : IEnumerable<MyType>
{
private readonly Dictionary<int, MyType> c_index;
public MyTypes(IEnumerable<MyType> seed)
{
this.c_index = seed.ToDictionary(item => item.Number);
}
public IEnumerator<MyType> GetEnumerator()
{
return this.c_index.Values.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return this.GetEnumerator();
}
public int CustomMethod()
{
return 1; // Just for illustration
}
}
दिखाता है मेरे संग्रह वर्ग का एक सरल संस्करण है
[
{
"Number": 1
},
{
"Number": 2
}
]
लेकिन फिर जब मैं deserialize करने की कोशिश करता हूं तो मुझे निम्नलिखित अपवाद सिस्टम प्राप्त होता है। अपवाद: सूची प्रकार MyTypes
भी नहीं बना सकता है रीड क्रमबद्धता संकेत का उपयोग कर, लेकिन कोई सफलता
पड़ा है ये परीक्षण समारोह मैं
public void RoundTrip()
{
var _myTypes1 = new MyTypes(new[] { new MyType(1), new MyType(2) });
var _jsonContent = JsonConvert.SerializeObject(_myTypes1, Formatting.Indented);
var _myTypes2 = JsonConvert.DeserializeObject<MyTypes>(_jsonContent);
}
public void RoundTripWithSettings()
{
var _myTypes1 = new MyTypes(new[] { new MyType(1), new MyType(2) });
var _serializationSettings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Arrays };
var _jsonContent = JsonConvert.SerializeObject(_myTypes1, Formatting.Indented, _serializationSettings);
var _myTypes2 = JsonConvert.DeserializeObject<MyTypes>(_jsonContent, _serializationSettings);
}
किसी को भी अपने स्वयं के संग्रह वस्तुओं को क्रमानुसार में कामयाब रहा है का इस्तेमाल किया है कर रहे हैं?
अग्रिम
पैट
आपको कंक्रीट संग्रहों को क्रमबद्ध और deserialise जैसे सूची की तुलना में IENumerable की तुलना में करना चाहिए। कुछ deserialise करने के लिए, यह सिर्फ एक इंटरफेस के बजाय एक कार्यान्वयन की जरूरत है। –
Deleted
क्रिस, कुछ अन्य परिवर्तनों के साथ ReadOnlyCollection उपखंड के लिए बदला गया है लेकिन मैं संग्रह –
pmcgrath
संग्रह को deserialize पता कर सकते हैं वास्तव में आप एक IList का भी उपयोग कर सकते हैं। यह आपके लिए एक सूची तैयार करेगा। लेकिन IENumerable के लिए परिभाषित कोई डिफ़ॉल्ट संग्रह नहीं है। –
Mithon