我有一个我似乎无法解决的问题。
我有以下课程
public class Foo:IFoo
{
Private List<IBar> _listTest=new List<IBar>();
Public List<IBar> ListTest
{
get
{
return _listTest;
}
set
{
_listTest=value;
}
}
}
当我从mvc应用程序进行webapi调用并尝试反序列化时,我收到以下错误
JsonSerializationException:无法创建IBar类型的实例。 Type是接口或抽象类,无法实例化。
我知道这可以通过将接口列表的返回类型更改为List来修复,但这似乎不是一个好主意。
将反序列化的最佳方法是什么?
答案 0 :(得分:0)
你没有提到使用过的序列化程序,所以它可以说是JSON.NET :)
人们可能会同意或不同意,但在我看来,应该避免使用对象中的接口。例如,当接口飞来飞去时,更难以改变串行器。
但是
public class Foo : IFoo
{
[JsonConverter(typeof(JsonKnowType<List<SomeBarImp>>))]
public List<IBar> ListTest { get; set; }
}
与
public class JsonKnowType<TConcrete> : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return true;
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
return serializer.Deserialize<TConcrete>(reader);
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
serializer.Serialize(writer, value);
}
}
可能对您有用。
但是你可以注意到,在最后明确定义了类型。