首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Newtonsoft JSON: TypeNameHandling - $type用途

Newtonsoft JSON: TypeNameHandling - $type用途
EN

Stack Overflow用户
提问于 2017-11-07 21:51:25
回答 1查看 972关注 0票数 2

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

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-07 21:58:29

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

考虑以下类型:

代码语言:javascript
复制
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;}
}

如果你这样做:

代码语言:javascript
复制
JsonConvert.DeserializeObject<MySerializableClass>(json);

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

bun通常会建议您不要这样做,因为json中存储到db或其他内容的类型名称可能会更改(名称空间更改等)。并且在代码更改时反序列化是有问题的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47168039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档