我有这个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有效
答案 0 :(得分:2)
您的字符串在List<object>
中反序列化。列表只能使用一维索引。
因此,反序列化仅创建两个JArray类型的对象。
第一个是由四个城市组成的组,第二个是由14个城市组成的阵列。
您可以使用
获取第一个对象的第一个元素Console.WriteLine((data[0] as JArray)[0][0]);
同时,如果要访问第二个JArray中的任何元素,则可以使用此语法
Console.WriteLine((data[1] as JArray)[1]["City"]); // Beersheba