Newtonsoft JSON:TypeNameHandling - $type 目的

安迪·科斯

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

我通过设置TypeNameHandling(de)serializer 的属性来启用此功能,因为我的目的是进行强大的验证,尤其是在反序列化期间。但是现在我看到反序列化器反序列化数据没有问题,即使没有生成的$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 中的类型名称存储到 db 或某些内容可能会更改(命名空间更改等)并且在代码更改时反序列化有问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章