gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 19:17:12 25 4
gpt4 key购买 nike

我们有一个单一的契约(Contract)程序集,其中包含我们所有的数据契约(Contract)。我们正在使用 JSON.net 将我们的数据契约(Contract)序列化为 json。

JSON.Net 在序列化的 $type 属性中添加类型名称和程序集名称。由于我们所有的数据契约都在始终加载在当前应用程序域中的同一个程序集中,我们应该能够省略这一点。

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

谢谢

最佳答案

您可以使用 Binder您的属性(property)JsonSerializerSettings .

这篇博客文章(由库作者)描述了这些步骤:http://james.newtonking.com/archive/2011/11/19/json-net-4-0-release-4-bug-fixes.aspx

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

  • BindToName(Type serializedType, out string assemblyName, out string typeName)
  • BindToType(string assemblyName, string 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);
    }

    关于json - 在 JSON.Net 中序列化和反序列化时,如何从类型名称中省略程序集名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8039910/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com