Unity C # - как получить значения списка <object> - PullRequest
0 голосов
/ 01 июля 2018

У меня есть этот 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 Невозможно применить индексирование с помощью [] к выражению типа «объект» Assembly-CSharp C: \ Users \ cdi2 \ Downloads \ mdClone-20180627T083334Z-001 \ mdClone \ Assets \ CreateTable.cs 31 Active

1 Ответ

0 голосов
/ 01 июля 2018

Ваша строка десериализована в List<object> Список может быть проиндексирован только с одним измерением.
Таким образом, десериализация создает только два объекта типа JArray.
Первый - это группа из четырех городов, а второй - массив из 14 городов.

Вы можете получить первый элемент первого объекта с помощью

Console.WriteLine((data[0] as JArray)[0][0]);

Хотя, если вы хотите получить доступ к любому из элементов второго JArray, вы можете использовать этот синтаксис

Console.WriteLine((data[1] as JArray)[1]["City"]);   // Beersheba
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...