मैं ASP.NET MVC वेब एपीआई का उपभोग करने के लिए कुछ कोड स्थानांतरित करने के लिए कोशिश कर रहा हूँ JSON डेटा के बजाय सोप Xml उत्पन्न।NewtonSoft.Json को क्रमानुसार और deserialize प्रकार की संपत्ति IEnumerable साथ वर्ग <ISomeInterface>
मैं serializing और deserializing प्रकार के गुणों के साथ किसी समस्या का सामना किया है:
:public interface ISample{
int SampleId { get; set; }
}
public class Sample : ISample{
public int SampleId { get; set; }
}
public class SampleGroup{
public int GroupId { get; set; }
public IEnumerable<ISample> Samples { get; set; }
}
}
मैं के साथ आसानी से SampleGroup के उदाहरण को क्रमानुसार कर सकते हैं:
IEnumerable<ISomeInterface>.
यहाँ एक सरल उदाहरण है
var sz = JsonConvert.SerializeObject(sampleGroupInstance);
हालांकि इसी deserialize विफल रहता है:
JsonConvert.DeserializeObject<SampleGroup>(sz);
इस अपवाद संदेश के साथ
:
"प्रकार JsonSerializationExample.ISample का एक उदाहरण नहीं बना सका। प्रकार एक इंटरफ़ेस या अमूर्त वर्ग है और instantated नहीं किया जा सकता "
मैं निकाले जाते हैं, तो एक JsonConverter मैं अपनी संपत्ति के रूप में निम्नानुसार को सजाने कर सकते हैं:।
[JsonConverter(typeof (SamplesJsonConverter))]
public IEnumerable<ISample> Samples { get; set; }
यहाँ है JsonConverter:
public class SamplesJsonConverter : JsonConverter{
public override bool CanConvert(Type objectType){
return (objectType == typeof (IEnumerable<ISample>));
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer){
var jA = JArray.Load(reader);
return jA.Select(jl => serializer.Deserialize<Sample>(new JTokenReader(jl))).Cast<ISample>().ToList();
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer){
... What works here?
}
}
यह कनवर्टर अक्रमांकन समस्या का हल है, लेकिन मैं फिर से काम कर पाने के लिए क्रमबद्धता WriteJson विधि कोड करने के लिए कैसे समझ नहीं सकता।
किसी की सहायता कर सकते हैं?
यह एक "सही" जिस तरह से पहली जगह में समस्या को हल करने है?
नीचे दिए गए उत्तरों के अतिरिक्त, आप ['CanWrite'] (http://www.newtonsoft.com/json/help/html/P_Newtonsoft_Json_JsonConverter_CanWrite.htm) को ओवरराइड कर सकते हैं और 'false' वापस कर सकते हैं। देखें [एक कस्टम जेसन कनवर्टर में डिफ़ॉल्ट क्रमिकरण का उपयोग कैसे करें] (https://stackoverflow.com/questions/29616596/how-to-use-default-serialization-in-a-custom-jsonconverter/29616648#29616648)। – dbc