Json.NET与Newtonsoft.Json SerializationBinder不同

问题描述 投票:0回答:1

我知道这个主题中有很多类似的问题,但是我在这里找不到答案。

我已经在Unity中下载了Json.net,并在另一个项目中将它们作为NuGet包下载了Newtonsoft.jsonNewtonsoft.json正在工作,我试图在Unity项目中使用此工作解决方案。

I 需要使用ISerializationBinder来转换抽象类层次结构,我想序列化/反序列化类名only,而不是其完整程序集名称。 (原因是C#代码应与其他程序通信。)

我使用的解决方案具有以下用于序列化的类(从在线官方示例复制):

public class KnownTypesBinder : ISerializationBinder
{
    public IList<Type> KnownTypes { get; set; }

    public Type BindToType(string assemblyName, string typeName)
    {
        return KnownTypes.SingleOrDefault(t => t.Name == typeName);
    }

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

ISerializationBinderJson.net中不存在。 JsonSerializerSettings明显不同:

Newtonsoft.json

public class JsonSerializerSettings 
{
    public ISerializationBinder SerializationBinder { get; set; }
}

Json.net

public class JsonSerializerSettings
{
    public SerializationBinder Binder { get; set; }
}

[System.Runtime.Serialization.SerializationBinder(不是从ISerializationBinder派生的)没有称为public void BindToName(Type serializedType, out string assemblyName, out string typeName)的方法,这意味着无法定义类型名称。

  • 所以,如何在Unity中仅使用类名来解决序列化? (此处仅设置TypeNameHandling = TypeNameHandling.Objects,是没有解决方案的。)
  • 为什么显然不是这样,每个人都声称他们相同? (即使下面的Json.net的StackOverflow标签也可以做到这一点。)
  • 差异与Unity使用Mono的事实有关系吗?

谢谢。

c# json unity3d mono json.net
1个回答
0
投票
如果您想使用Newtonsoft.Json的新功能,我建议跳到其他解决方案。 Newton.Json为Unity开发的当前最新分支在此处:https://github.com/jilleJr/Newtonsoft.Json-for-Unity#readme,在撰写本文时为Newtonsoft.Json 12.0.3。

jilleJr / Newtonsoft.Json-for-Unity也通过内置的Unity软件包管理器进行部署,因此对用户而言,保持最新状态也将变得更加容易。

© www.soinside.com 2019 - 2024. All rights reserved.