Newtonsoft JSON: TypeNameHandling - $type 用途
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 中的类型名称可能会发生变化(命名空间发生变化等)并且在代码发生变化时反序列化会有问题.
在 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 中的类型名称可能会发生变化(命名空间发生变化等)并且在代码发生变化时反序列化会有问题.