Newtonsoft JSON: TypeNameHandling - $type purpose



JSON数据中生成$type值的主要目的(或优势)是什么?它是否以某种方式简化了反序列化?

我通过设置(反)序列化程序的属性TypeNameHandling启用此功能,因为我的目的是进行强有力的验证,尤其是在反序列化期间。但是现在我看到反序列化器对数据进行反序列化没有问题,即使没有生成的$type信息。

那么,请问,将$type与Newtonsoft JSON一起使用的用例是什么?

该设置允许您序列化在其类型定义中具有接口或(抽象)基类的类。

请考虑以下类型:

public class MySerializableClass
{
    public IOther Other {get;set;}
    public BaseClass Base {get;set;}
}
public interface IOther
{
    public string Foo {get;set;}
}
public abstract class BaseClass
{
    public int MyNumber {get;set;}
}

如果你做这样的事情:

JsonConvert.DeserializeObject<MySerializableClass>(json);

json.net 不知道如何创建IOther和Baseclass的实例,因为它们是抽象的。 因此,它为您提供此设置以支持此类基类或接口的序列化,因为它将该属性的实例的类型存储在生成的 JSON 的$type成员中。

BUN 通常建议您不要这样做,因为存储在数据库或其他东西中的 JSON 类型名称可能会发生变化(命名空间更改等),并且在代码更改时反序列化存在问题。

相关内容

  • 没有找到相关文章

最新更新