加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在JSON.Net中序列化和反序列化时,如何从类型名称中省略程序集名

发布时间:2020-12-16 18:40:18 所属栏目:百科 来源:网络整理
导读:我们有一个合同装配,其中包含我们所有的数据合同.我们正在使用 JSON.net将我们的数据合同序列化为json. JSON.Net在序列化的$type属性中添加了类型名称和程序集名称.由于我们所有的数据合同都在同一个程序集中,并且总是在当前应用程序域中加载,因此我们应该可
我们有一个合同装配,其中包含我们所有的数据合同.我们正在使用 JSON.net将我们的数据合同序列化为json.

JSON.Net在序列化的$type属性中添加了类型名称和程序集名称.由于我们所有的数据合同都在同一个程序集中,并且总是在当前应用程序域中加载,因此我们应该可以省略它.

我们怎样才能做到这一点?

谢谢

解决方法

您可以在JsonSerializerSettings中使用Binder属性.

此博客文章(由图书馆作者撰写)描述了步骤:http://james.newtonking.com/archive/2011/11/19/json-net-4-0-release-4-bug-fixes.aspx

简而言之,您创建一个派生自SerializationBinder的自定义类并覆盖两个方法:

> BindToName(输入serializedType,输出字符串assemblyName,输出字符串typeName)
> BindToType(字符串assemblyName,字符串typeName)

您在这些方法中放置的逻辑将使您可以直接控制类型名称在$type字段中如何转换为字符串表示形式,以及类型在运行时如何定位$type的值.

在您的情况下,想要省略程序集名称,您可能会这样做:

public override void BindToName(
    Type serializedType,out string assemblyName,out string typeName)
{
    assemblyName = null;
    typeName = serializedType.FullName;
}

public override Type BindToType(string assemblyName,string typeName)
{
    return Type.GetType(typeName);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读