有没有人成功地将 Json.NET 适配/移植到能够在 Unity3d 下运行的版本,部署到 iOS(以及 webplayer 和 android,但这些似乎不太成问题),以某种方式克服了那里的 AOT 问题?
或者是否有计划发布 Json.NET 的兼容版本?
非常感谢,
最大限度
您可以在 Unity中使用网络标准版本的Newtonsoft.Json ,它工作正常。看起来这个库已经改变了一些内部实现,不再用于反序列化。请确保在下载 nuget 包后,您会从netstandard2.0文件夹中获得Newtonsoft.Json.dll,而不是从net45中。并且不要忘记在link.xml中指定不应剥离类(它用于反序列化)以及用于反序列化的库/类(以保留构造函数)。您的 link.xml 应该看起来像这样:System.Reflection.Emit
System.Linq.Expressions.Interpreter.LightLambda
<linker>
<assembly fullname="Your.Dto.Package.Name" preserve="all" />
<assembly fullname="System.Core">
<type fullname="System.Linq.Expressions.Interpreter.LightLambda" preserve="all" />
</assembly>
</linker>
我们在所有带有 IL2CPP 和 Mono 运行时的 Android 和 iOS 项目中都使用这个库。此外,与 Unity 的JsonUtility不同,Newtonsoft.Json 完全支持任何类型的对象,包括 Dictionary。
Newtonsoft Json 在 iOS 中的 AOT 失败,并且在反序列化从 webplayer 中的 KeyedCollection 继承的任何内容时也失败。这是一个已修复的版本:
我们使用MiniJson,到目前为止它很好地满足了我们的 json 需求:)
一段时间以来,我一直面临同样的问题,并在互联网的每个角落和缝隙中搜索以寻找解决方案。这对我有用。
有什么不同?
希望这可以帮助。干杯!
看看LitJson的修改版:UnityLitJson
实际上 LitJson 有一些问题并且并不总是按预期工作,所以我创建了一个简单的 JSON-Lib 可以处理所有 Unity3D 类型、枚举和任意类。在 GitHub 上找到它:Tiny-JSON
您可以非常简单地使用它:
// encode
Animal a = new Animal(4);
string json = Json.Encode(a);
// decode
IList<Animal> a = Json.Decode<IList<Animal>>("[{\"legs\":4}, {\"legs\":2}]");
是的,我们在客户端和服务器上共享代码,并使用旧版本,它被称为 NewtonSoft.Json。适用于IOS,Android,一切。
搜索 NewtonSoft.Json,您可能会找到一个存档。