Есть ли способ конвертировать JSON в C # класс, у которого List <Object>в качестве параметра? - PullRequest
1 голос
/ 17 мая 2019

Есть ли способ в Unity для анализа строки JSON в классе C #, который имеет список - давайте предположим - строку?

У меня есть приложение, которое получает много данных с сервера. Эти данные поступают в формате JSON и имеют много полей. В некоторых полях есть другой массив (я знаю, у кого есть массив внутри, а у кого нет).

Зная это, я хочу превратить его в класс, чтобы иметь доступ к его параметрам, [я не могу создать массив и попытаться получить доступ, например, к arr [0], потому что arr [0] может не быть поле, которое я хочу - учитывая, что позиции массива могут меняться, но значение ключа поля (или поля-ключа-поля, если массив имеет массив внутри) не будет]

{
  "success": "1",
  "menus": [
    {
      "id_menu": "506",
      "nome": "Blog",
      "tipo": "blog"
    },
    {
      "id_menu": "510",
      "nome": "Sobre",
      "tipo": ""
    },
    {
      "id_menu": "2407",
      "nome": "(Projeto Quatro Artes)",
      "tipo": ""
    },
    {
      "id_menu": "2603",
      "nome": "(Loja)",
      "tipo": ""
    },
    {
      "id_menu": "2687",
      "nome": "(Material NA)",
      "tipo": ""
    },
    {
      "id_menu": "2818",
      "nome": "(Forms)",
      "tipo": ""
    },
    {
      "id_menu": "2826",
      "nome": "(PHP+PIZZA)",
      "tipo": ""
    },
    {
      "id_menu": "7728",
      "nome": "(Image)",
      "tipo": ""
    },
    {
      "id_menu": "3239",
      "nome": "(jc)",
      "tipo": ""
    },
    {
      "id_menu": "6024",
      "nome": "(assinatura)",
      "tipo": ""
    }
  ]
}

Приведенный выше код является одним из JSONS, который я хочу проанализировать, а код ниже - это класс, который я создал для его анализа. Теперь мне просто нужно знать, как это сделать.

[System.Serializable]
public class Menu
{
    public string id_menu { get; set; }
    public string nome { get; set; }
    public string tipo { get; set; }
}

[System.Serializable]
public class Return
{
    public string success { get; set; }
    public List<Menu> menus { get; set; }
}

Я знаю, что JsonUtility.FromJson () может выполнять эту работу, если нет списков, но со списками это просто не работает Кроме того, попытка использовать JSONObject из ресурсов Unity также не работает, потому что я не могу получить доступ к return.menus.tipo (как пример), потому что у него нет ассоциативного индекса.

Ответы [ 3 ]

1 голос
/ 17 мая 2019

возможно использовать Json.NET или другой десериализатор, который имеет полную поддержку произвольных типов?

public class MyClass
{
    public string id_menu { get; set; }
    public string nome { get; set; }
    public string tipo { get; set; }
    public List<string> my_list {get; set; }
}

var result = JsonConvert.DeserializeObject<MyClass>(json);
0 голосов
/ 17 мая 2019

вы можете сделать это следующим образом:

var returnObj = JsonConvert.DeserializeObject<Return>(json);

Чтобы это работало, вам нужен следующий пакет: Newtonsoft.Json

Результат выглядит следующим образом: enter image description here

Я сделал небольшое консольное приложение, которое показывает вам путь. В Unity должно быть то же самое:

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Text;

namespace IoException
{
    [System.Serializable]
    public class Menu
    {
        public string id_menu { get; set; }
        public string nome { get; set; }
        public string tipo { get; set; }
    }

    [System.Serializable]
    public class Return
    {
        public string success { get; set; }
        public List<Menu> menus { get; set; }
    }

    public class JsonExercise
    {
        public static void Main(string[] args)
        {
            var currentLine = Console.ReadLine();
            var sb = new StringBuilder();

            while (currentLine != "END")
            {
                sb.AppendLine(currentLine);

                currentLine = Console.ReadLine();
            }

            var json = sb.ToString().Trim();

            var returnObj = JsonConvert.DeserializeObject<Return>(json);

            Console.WriteLine();
        }
    }
}

Замечания о консольном приложении, на случай, если вы захотите его попробовать:

  • Когда вы вводите JSON, введите «END» в качестве последней строки, чтобы консольное приложение прекратило чтение.
  • Для ввода JSON я использовал предоставленный вами.
0 голосов
/ 17 мая 2019

Если вы попытаетесь проанализировать Json через Unity, вы можете использовать JsonUtility.FromJson (jsonString), он будет анализировать Json для объекта, который он может обрабатывать, но я никогда не пытался использовать со сложными JSON.

Или вы можете запустить json и найти нужное значение ключа, но оно наверняка увеличит потребление памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...