.net - 使用 Json.NET 转换器反序列化属性

标签 .net serialization json.net

我有一个类定义,其中包含返回接口(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 将是完全限定的类型,因此如果您使用类型信息对其进行序列化,则反序列化器也需要能够理解它。

文档:Serialization Settings with Json.NET

关于.net - 使用 Json.NET 转换器反序列化属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2254872/

相关文章:

.net - 在 WinForms 中向系统菜单(左上角图标菜单)添加条目?

c# - HttpContext 抛出 HttpException

c# - JSON 对象不序列化大数据

java.io.NotSerializedException : com. impetus.kundera.persistence.EntityManagerImpl

c# - JSON.Net无法在自定义JsonConverter中反序列化json数组

c# - 如何在 web api 中显示文件中的所有日志

C# 可以将 "program"类部分用于控制台应用程序吗?

php - 反序列化数据不起作用

c# - 当 json 中的 id 属性充当对象时创建 POCO

c# - 扩展 CamelCasePropertyNamesContractResolver 不起作用