我知道这个主题中有很多类似的问题,但是我在这里找不到答案。
我已经在Unity中下载了Json.net
,在另一个项目中下载了Newtonsoft.json
作为NuGet软件包。 Newtonsoft.json
正在工作,我试图在Unity项目中使用此工作解决方案。
我需要使用ISerializationBinder
来转换抽象类层次结构,我想仅 而不是完整地对类名进行序列化/反序列化程序集名称。 (原因是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;
}
}
ISerializationBinder
在Json.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)
的方法,这意味着无法定义类型名称。
TypeNameHandling = TypeNameHandling.Objects,
并不是解决方案)Json.net
的StackOverflow标签也可以做到这一点。)谢谢。
答案 0 :(得分:1)
这是版本控制问题。您所指的JSON .NET for Unity
仅使用Json.NET
(如注释中所述)使用Newtonsoft.Json 8.0.3。
如果您想使用Newtonsoft.Json的新功能,建议您使用其他解决方案。 Newtonsoft.Json为Unity制作的当前最新分支在这里:https://github.com/jilleJr/Newtonsoft.Json-for-Unity#readme,在撰写本文时位于Newtonsoft.Json 12.0.3。
jilleJr / Newtonsoft.Json-for-Unity也通过内置的Unity Package Manager进行部署,因此,使用户保持最新状态也很容易。