13

有没有人成功地将 Json.NET 适配/移植到能够在 Unity3d 下运行的版本,部署到 iOS(以及 webplayer 和 android,但这些似乎不太成问题),以某种方式克服了那里的 AOT 问题?

或者是否有计划发布 Json.NET 的兼容版本?

非常感谢,

最大限度

4

7 回答 7

10

您可以在 Unity中使用网络标准版本的Newtonsoft.Json ,它工作正常。看起来这个库已经改变了一些内部实现,不再用于反序列化。请确保在下载 nuget 包后,您会从netstandard2.0文件夹中获得Newtonsoft.Json.dll,而不是从net45中。并且不要忘记在link.xml中指定不应剥离类(它用于反序列化)以及用于反序列化的库/类(以保留构造函数)。您的 link.xml 应该看起来像这样:System.Reflection.EmitSystem.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。

微软示例

于 2019-12-26T10:20:10.587 回答
6

Newtonsoft Json 在 iOS 中的 AOT 失败,并且在反序列化从 webplayer 中的 KeyedCollection 继承的任何内容时也失败。这是一个已修复的版本:

JSON .NET For Unity(支持 iOS)

于 2013-09-14T00:12:26.947 回答
2

我们使用MiniJson,到目前为止它很好地满足了我们的 json 需求:)

于 2013-05-04T11:53:36.033 回答
2

一段时间以来,我一直面临同样的问题,并在互联网的每个角落和缝隙中搜索以寻找解决方案。这对我有用。

有什么不同?

  • Unity的 NewtonSoft.Json 与标准的NewtonSoft.Json不同
  • NewtonSoft.Json 不支持 Unity 中 IL2CPP 构建的 AOT 目标
  • Unity 的 NewtonSoft.Json 支持 AOT 目标,例如所有 IL2CPP 构建(WebGL、iOS、Android、Windows、Mac OS X)和便携式 .NET(UWP、WP8)。

希望这可以帮助。干杯!

于 2020-11-12T22:34:47.607 回答
1

看看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}]");
于 2015-03-23T11:26:21.610 回答
1

不,AFAIK。

LitJson 和 JsonFX 将是 Unity3D 的替代选择。

http://wiki.unity3d.com/index.php?title=UnityLitJSON

于 2013-05-03T13:49:21.183 回答
-1

是的,我们在客户端和服务器上共享代码,并使用旧版本,它被称为 NewtonSoft.Json。适用于IOS,Android,一切。

搜索 NewtonSoft.Json,您可能会找到一个存档。

于 2013-05-08T00:43:21.937 回答