【问题标题】:How can I deserialize json array?如何反序列化 json 数组?
【发布时间】:2021-09-10 16:38:39
【问题描述】:

我有一个 json 和一个数组,看起来像这样:

{ 
  "data" : [
    [int],
    [...],
    [..n]
  ]
}

我可以使用 JsonUtility 从“数据”中获取数组吗?还是其他方式?

目前,我可以使用以下代码获取“数据”:

[System.Serializable]
public class ObjectProperties
{
    public int[] data;
    public string color;
}
public void LoadFromJson()
{
    objectProperties = JsonUtility.FromJson<ObjectProperties>(File.ReadAllText(Application.streamingAssetsPath + "/CubeSettings.json"));
}

我可以得到任何数据,但我需要的数组除外。

【问题讨论】:

  • 我不明白你想要什么。你能用你熟悉并使用的语言写它吗?谷歌翻译?
  • 所以使用objectProperties.data。有什么问题?
  • 那么有什么问题吗?否则我会说“就像这样”...... EXCEPT 你的结构真的是[[1], [2], [3], ... ] .. 在这种情况下,你的JSON要么是错误的,而是应该是[1,2,3,...],或者你有嵌套数组( int[][]) 内置的 JsonUtility 不支持 ...
  • @Sheradil,我更新了我的问题。请检查一下,如果你还有什么不明白的地方问我。
  • 请明确您期望代码做什么以及您实际得到什么。从上面的代码我看不出有什么问题,你应该可以通过objectProperties.data获取数组。

标签: c# json unity3d


【解决方案1】:

如果结构实际上是例如

{ 
  "data" : [
    [1],
    [2],
    [3]
  ]
}

这是一个嵌套数组 int[][](每个元素都是数组本身的数组)。

所以 JSON 应该看起来像

{ 
  "data" : [
    1,
    2,
    3
  ]
} 

或者 - 如果更改 JSON 不是你的选择 - 你的 c# 结构必须是

[System.Serializable]
public class ObjectProperties
{
    public int[][] data;
    public string color;
}

但是内置的JsonUtility 不支持这种嵌套数组(参见Script Serialization)。

为此,您需要使用不同的库,例如Newtonsoft .NET JSON(以Package via the Package Manager 的形式提供)

var json = File.ReadAllText(Application.streamingAssetsPath + "/CubeSettings.json"));
var objectProperties = JsonConvert.DeserializeObject<ObjectProperties>(json);

这也意味着该字段在 Inspector 中将不可见/不可编辑,并且不会与 Unity 中的场景或预制件一起保存。

【讨论】:

  • 非常感谢,这正是我所需要的 :)
【解决方案2】:

我假设“数据”是数组本身,而不是数组数组。 所以应该是

{"data":[1,2,3],"color":"red"}

您还应该定义 get/set 以将字段包含到序列化中:

[System.Serializable]
public class ObjectProperties 
{
    public int[] data { get; set; }
    public string color { get; set; }
}

现在你可以运行它了:

var objectProperties = JsonSerializer.Deserialize<ObjectProperties>(...);

【讨论】:

  • 您应该删除 {get; set} 并坚持使用字段以保持 Unity 编辑器中的序列化 - 换句话说,以便能够保存场景和预制件中的值并能够通过检查器编辑值
  • 我在示例中使用的 JsonSerializer 需要它。
猜你喜欢
  • 2012-06-21
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 2015-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多