首页 >后端开发 >C++ >如何使用C#序列化和逐序化JSON和JSON数组?

如何使用C#序列化和逐序化JSON和JSON数组?

Susan Sarandon
Susan Sarandon原创
2025-02-03 04:26:13289浏览

How to Serialize and Deserialize JSON and JSON Arrays in Unity using C#?

在Unity中使用C#序列化和反序列化JSON和JSON数组

问题:

您希望在Unity中使用C#序列化和反序列化JSON数据(包括JSON数组)。Boomlagoon.JSON库在反序列化列表时只检索第一个对象。

解决方案:

Unity在5.3.3版本之后添加了JsonUtility到API中。此API允许对数据类型进行轻量级序列化和反序列化。

单个数据对象(非数组JSON)的序列化和反序列化

序列化:

  • 使用JsonUtility.ToJson(object obj);将对象转换为JSON。
  • 对于格式化输出,使用JsonUtility.ToJson(object obj, bool prettyPrint);

反序列化:

  • 使用JsonUtility.FromJson<T>(string json);将JSON反序列化为特定类型T。
  • 您也可以使用JsonUtility.FromJson(string json, Type type);反序列化为指定的类型。
  • 要覆盖现有实例,请使用JsonUtility.FromJsonOverwrite(string json, object objectToOverwrite);

多个数据对象(数组JSON)的序列化和反序列化

要序列化和反序列化JSON数组,您需要一个辅助类,例如JsonHelper(在下面的代码示例中提供)。

序列化:

  • 创建一个对象数组,并使用JsonHelper.ToJson(T[] array)将其转换为JSON。
  • 对于格式化输出,使用JsonHelper.ToJson(T[] array, bool prettyPrint)

反序列化:

  • 使用JsonHelper.FromJson<T>(string json)将JSON反序列化为数组。

附加说明:

  • Unity的JsonUtility本身不支持数组。
  • 要序列化或反序列化以数字或数字属性开头的JSON,请考虑使用SimpleJSON库。
  • 从类成员中删除get; set;以确保与JsonUtility兼容。

代码示例:

序列化单个数据对象:

<code class="language-csharp">Player playerInstance = new Player();
playerInstance.playerId = "8484239823";
playerInstance.playerLoc = "Powai";
playerInstance.playerNick = "Random Nick";

// 转换为JSON
string playerToJson = JsonUtility.ToJson(playerInstance);
Debug.Log(playerToJson);</code>

反序列化单个数据对象:

<code class="language-csharp">string jsonString = "{"playerId":"8484239823","playerLoc":"Powai","playerNick":"Random Nick"}";
Player player = JsonUtility.FromJson<Player>(jsonString);
Debug.Log(player.playerLoc);</code>

序列化JSON数组:

<code class="language-csharp">Player[] playerInstance = new Player[2];

playerInstance[0].playerId = "8484239823";
playerInstance[0].playerLoc = "Powai";
playerInstance[0].playerNick = "Random Nick";

playerInstance[1].playerId = "512343283";
playerInstance[1].playerLoc = "User2";
playerInstance[1].playerNick = "Rand Nick 2";

// 转换为JSON
string playerToJson = JsonHelper.ToJson(playerInstance);
Debug.Log(playerToJson);</code>

反序列化JSON数组:

<code class="language-csharp">string jsonString = "... [player data] ...";
Player[] player = JsonHelper.FromJson<Player>(jsonString);
Debug.Log(player[0].playerLoc);
Debug.Log(player[1].playerLoc);</code>

(请注意,代码示例中省略了JsonHelper类的实现,需要自行补充。 JsonHelper类应该包含ToJsonFromJson方法以处理数组序列化和反序列化。)

以上是如何使用C#序列化和逐序化JSON和JSON数组?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn