是否有人成功地适应/移植Json ?NET到一个能够在部署到iOS的Unity3d下运行的版本(以及webplayer和android,但这些问题似乎较少),以某种方式克服了AOT问题?
或者是否计划发布一个兼容的Json.NET版本?
许多谢谢,马克思您可以使用netstandard版本的Newtonsoft。Json在Unity中工作得很好。似乎这个库已经改变了一些内部实现,不再使用System.Reflection.Emit
进行反序列化。请确保在下载nuget包后,您从netstandard2.0文件夹获得Newtonsoft.Json.dll,而不是从net45文件夹。并且不要忘记在link.xml中指定System.Linq.Expressions.Interpreter.LightLambda
类不应该被剥离(它用于反序列化)以及用于反序列化的库/类(以保留构造函数)。您的link.xml应该看起来像这样:
<linker>
<assembly fullname="Your.Dto.Package.Name" preserve="all" />
<assembly fullname="System.Core">
<type fullname="System.Linq.Expressions.Interpreter.LightLambda" preserve="all" />
</assembly>
</linker>
我们在Android和iOS的所有项目中使用这个库与IL2CPP和Mono运行时。此外,不像Unity的JsonUtility, Newtonsoft。Json完全支持任何类型的对象,包括Dictionary。
微软示例Newtonsoft Json在iOS中的AOT失败,并且在反序列化webplayer中继承KeyedCollection的任何内容时也失败。这是一个已经修复的版本:
JSON .NET For Unity(支持iOS)我们使用MiniJson,到目前为止它很好地满足了我们的json需求:)
我已经面对同样的问题一段时间了,并在互联网的每一个角落和缝隙寻找解决方案。以下是对我有用的方法。
- 我替换了NewtonSoft。Json与NewtonSoft。Unity的Json
- 卸载NewtonSoft。从Unity的Nuget包管理器中获取Json。
- 安装NewtonSoft。使用Unity的包管理器。遵循以下安装步骤
有什么区别?
- NewtonSoft。Unity的Json不同于标准的NewtonSoft。Json
- NewtonSoft。Json不支持Unity中IL2CPP构建的AOT目标
- NewtonSoft。Json for Unity支持AOT目标,如所有IL2CPP构建(WebGL, iOS, Android, Windows, Mac OS X)和便携式。net (UWP, WP8)。
希望这对你有帮助。干杯!
没有。
LitJson和JsonFX将是Unity3D的替代选择。
http://wiki.unity3d.com/index.php?title=UnityLitJSON看一下修改后的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。