unity C#-如何获取list <object>的值

时间:2018-07-01 08:49:20

标签: c# json unity3d mono

我有这个json:

[
  [
    [
      "Tel Aviv",
      "Beersheba",
      "Jerusalem",
      "Haifa"
    ]
  ],
  [
    {
      "City": "Tel Aviv"
    },
    {
      "City": "Beersheba"
    },
    {
      "City": "Jerusalem"
    },
    {
      "City": "Haifa"
    },
    {
      "City": "Jerusalem"
    },
    {
      "City": "Tel Aviv"
    },
    {
      "City": "Haifa"
    },
    {
      "City": "Beersheba"
    },
    {
      "City": "Jerusalem"
    },
    {
      "City": "Jerusalem"
    },
    {
      "City": "Haifa"
    },
    {
      "City": "Tel Aviv"
    },
    {
      "City": "Tel Aviv"
    },
    {
      "City": "Beersheba"
    }
  ]
]

我将其转换为列表:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Newtonsoft;
string jsonStr = "<json string from above>";
List<object> data;
private void Start()
{
    data = Newtonsoft.Json.JsonConvert.DeserializeObject<List<object>>(jsonStr);
    Debug.Log(data[0,0]);
}

但是当调试器进入“ Debug.Log(data [0,0]);”时,它打印:

  

严重性代码描述项目文件行抑制状态   错误CS0021无法将带有[]的索引应用于类型为'object'的表达式Assembly-CSharp C:\ Users \ cdi2 \ Downloads \ mdClone-20180627T083334Z-001 \ mdClone \ Assets \ CreateTable.cs 31有效

1 个答案:

答案 0 :(得分:2)

您的字符串在List<object>中反序列化。列表只能使用一维索引。
因此,反序列化仅创建两个JArray类型的对象。
第一个是由四个城市组成的组,第二个是由14个城市组成的阵列。

您可以使用

获取第一个对象的第一个元素
Console.WriteLine((data[0] as JArray)[0][0]);

同时,如果要访问第二个JArray中的任何元素,则可以使用此语法

Console.WriteLine((data[1] as JArray)[1]["City"]);   // Beersheba