我試圖移動一些代碼來使用ASP.NET MVC Web API生成的Json數據而不是SOAP Xml。NewtonSoft.Json具有IEnumerable <ISomeInterface>類型屬性的序列化和反序列化類
我已經運行與序列化和反序列化類型的屬性的問題:
IEnumerable<ISomeInterface>.
下面是一個簡單的例子:
: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的實例
var sz = JsonConvert.SerializeObject(sampleGroupInstance);
但是相應的反序列化失敗:
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'。請參閱[如何在自定義JsonConverter中使用默認序列化](https://stackoverflow.com/questions/29616596/how-to-use-default-serialization-in-a-custom-jsonconverter/29616648#29616648)。 – dbc 2017-02-04 20:40:54