我有一个类定义,其中包含返回接口(interface)的属性。
public class Foo
{
public int Number { get; set; }
public ISomething Thing { get; set; }
}
尝试使用 Json.NET 序列化 Foo 类时会出现一条错误消息,例如“无法创建“ISomething”类型的实例。ISomething 可能是接口(interface)或抽象类。”
是否有 Json.NET 属性或转换器可以让我指定在反序列化期间使用的具体 Something
类?
最佳答案
您可以使用 Json.NET 做的事情之一是:
var settings = new JsonSerializerSettings();
settings.TypeNameHandling = TypeNameHandling.Objects;
JsonConvert.SerializeObject(entity, Formatting.Indented, settings);
TypeNameHandling
标志将向 JSON 添加一个 $type
属性,这允许 Json.NET 知道需要将对象反序列化为哪种具体类型。这允许您反序列化对象,同时仍然实现接口(interface)或抽象基类。
然而,缺点是这是非常特定于 Json.NET 的。 $type
将是完全限定的类型,因此如果您使用类型信息对其进行序列化,则反序列化器也需要能够理解它。
关于.net - 使用 Json.NET 转换器反序列化属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2254872/