Десериализация строки JSON в объект в C# и Unity - PullRequest
1 голос
/ 25 марта 2020

Я получаю строку JSON от API, и мне нужно десериализовать ее во что-то, что я могу использовать в C# и Unity. Я пытаюсь использовать Сериализация JSON Unity , но мне кажется, это не работает?

Вот пример структуры JSON из API:

{
    "results": [
        [
            "2016-09-01/20160901_200002_000.jpg",
            "2016-09-01/20160901_192851_000.jpg",
            "2016-09-01/20160901_193443_000.jpg",
            "2016-09-01/20160901_210130_000.jpg"
        ],
        [
            "2016-09-02/20160902_104409_000.jpg",
            "2016-09-01/20160901_165949_000.jpg"
        ],
        [
            "2016-09-02/20160902_104409_000.jpg",
            "2016-09-02/20160902_104721_000.jpg",
            "2016-09-02/20160902_093420_000.jpg",
        ],
        [
            "2016-09-02/20160902_082554_000.jpg"
        ]
    ]
}

Это мой код, пытающийся десериализовать JSON в пользовательский класс с использованием JsonUtility в Unity. класс:

[Serializable]
public class MyClass
{
    public List<List<string>> results;
}

MyClass test = JsonUtility.FromJson<MyClass>(jsonString);
Debug.Log(test.results); // this is just returning null 

Кто-нибудь знает, что я делаю не так?

РЕДАКТИРОВАТЬ: Этот ответ , кажется, предполагает, что это потому, что JsonUtility не поддерживает массивы и предоставляет вспомогательный класс, но он не работает для этой проблемы.

1 Ответ

1 голос
/ 25 марта 2020

Вот метод, который я использую для декодирования JSON:

  1. Управляйте вашими NuGets и добавьте Json. NET .Web к вашим ссылкам
  2. Скопируйте и вставьте следующий метод
  3. Убедитесь, что вы получаете правильный объект. Похоже, у вас есть один ключ (= "результаты"), и что будет дальше, это значение, соответствующее вашему ключу. Вы можете легко декодировать «результаты» и сначала убрать все скобки «[]», а затем разделить строку на char [','] или сформировать JSON (если возможно) с ключом для каждого значения и декодировать эти значения.

Надеюсь, это поможет

public Dictionary<string, string> Decode(string encodedJson, string[] keys)
    {
        var details = JObject.Parse(encodedJson);
        Dictionary<string, string> decodedjson = new Dictionary<string, string>();
        foreach (var key in keys)
        {
            decodedjson.Add(key, details[key].ToString());
        }

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