我知道这个主题中有很多类似的问题,但是我在这里找不到答案。
我已经在Unity中下载了Json.net
,并在另一个项目中将它们作为NuGet包下载了Newtonsoft.json
。 Newtonsoft.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;
}
}
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标签也可以做到这一点。)谢谢。
jilleJr / Newtonsoft.Json-for-Unity也通过内置的Unity软件包管理器进行部署,因此对用户而言,保持最新状态也将变得更加容易。