将 System.Text.Json 与 Unity 配合使用

Use System.Text.Json with Unity

提问人:Will McVay 提问时间:11/16/2023 最后编辑:dbcWill McVay 更新时间:11/17/2023 访问量:73

问:

我在寻找与 Unity 的最新 LTS 版本 (2022.3.9f1) 兼容的 JSON 序列化/反序列化解决方案时遇到了困难,问题是需要与不包括任何 Unity 运行时库的软件共享的外部类库特别需要它,并且我还需要 JSON 的可访问性, 至少在这一点上,出于调试目的,不需要为每个有效负载提供详细的类。所以基本上 JSON.NET 是行不通的,它必须是System.Text.Json,在目标框架和依赖项之间,要让它与Unity一起工作存在许多障碍。JsonElement

我希望能够只在我的类库的源文件中,让它像一台好的计算机一样服从我。但是,通过以 .NET Standard 2.1 框架为目标,以创建 Unity 可以在不溅射和死亡的情况下加载的类库,如果不从 NuGet 获取该命名空间,我默认包含该命名空间还为时过早。好的,很好,除了最新版本不支持 .NET Standard 2.1,我需要升级我的目标框架,但我不能,因为 Unity.using System.Text.Json;

好的,所以我可以在 System.Text.Json 上回滚到 6.0.9,并且有关目标框架的警告消失了。库的开发工作,一切顺利,回到 Unity 重新导入更新的库,没有。由于引用缺失或不兼容,因此不会包含库,因此不会生成程序集,因为库中的错误。

问题是System.Text.Json @ 6.0.9需要在Unity项目中,它的三个依赖项也是如此:plugins

  • System.Text.Encodings.Web @ 6.0.0
  • System.Runtime.CompilerServices.Unsafe @ 6.0.0
  • Microsoft.Bcl.AsyncInterfaces @ 6.0.0

如果在 Visual Studio 的“解决方案资源管理器”中的“包”树下和 System.Text.Json 包上的“在文件资源管理器中打开文件夹”下查看这些引用,则都可以在文件夹中找到这些 dll。build

如果有更好的方法可以做到这一点,请务必向我提供线索,但我找到的答案都没有真正起作用,或者(相对)简单。

C# JSON unity-游戏引擎 system.text.json

评论

1赞 derHugo 11/16/2023
我不完全理解你对 Json.NET 的局限性是什么。如果不对特定类型实现进行(反)序列化,您到底打算使用什么用例?否则,也许这可能适合您的用例 stackoverflow.com/a/31035131/7111561......或者你可以完全动态
0赞 Dustin_00 11/16/2023
我发现完全支持 Json 的最简单方法是打开 Package Manager =>单击左上角的下拉列表 => 选择“按名称添加包...” =>输入:com.unity.nuget.newtonsoft-json -- 但我不知道 Newtonsoft 是否会满足您的 JsonElement 要求。[+]
0赞 BugFinder 11/17/2023
Unity 带有一个 JSON 提供程序,它有什么问题?
0赞 dbc 11/17/2023
我还需要 JSON 的 JsonElement 可访问性——Json.NET 中的等效类型是 JToken from LINQ to JSON,可以起诉它来反序列化没有固定架构的自由格式 JSON。我建议明确使用 .JTokendynamic
0赞 Will McVay 12/20/2023
谢谢@dbc,这听起来像是我一直在寻找的解决方案。如果我回到这个问题,我会试一试。Json.NET(Unity 附带的 JSON 提供程序,即使我在 Unity 之外明确需要 JSON 支持)的局限性是,我无法找到有关 JToken 类型的文档,这些文档听起来像是它提供了我需要的那种“快速原型”JSON 访问,而无需为每个有效负载创建基本上是一次性使用类型。不过,我发帖的第二个目的是提供更好的文档,以便让 System.Text.Json 在 Unity 中运行。

答: 暂无答案