«NullReferenceException» в Unity3D при попытке десериализации данных из JSON - PullRequest
0 голосов
/ 09 апреля 2019

Мне нужно получить некоторые данные из файла json. Я получил их в строку с именем dataAsJson, при отладке это выглядит так:

    {\r\n\t\"question\":\r\n\t[\r\n\t\t{\r\n\t\t\"text\": 
    \"głośniki\",\r\n\t\t\"correct\": \"speaker\",\r\n\t\t\"answer1\": 
    \"speaker1\",\r\n\t\t\"answer2\": \"speaker2\",\r\n\t\t\"answer3\": 
    \"speaker3\"\r\n\t\t},\r\n\t\t{\r\n\t\t\"text\": 
    \"pustynia\",\r\n\t\t\"correct\": \"desert\",\r\n\t\t\"answer1\": 
    \"desert1\",\r\n\t\t\"answer2\": \"desert2\",\r\n\t\t\"answer3\": 
    \"deser3\"\r\n\t\t},\r\n\t\t{\r\n\t\t\"text\": 
    \"rycerz\",\r\n\t\t\"correct\": \"knight\",\r\n\t\t\"answer1\": 
    \"knight1\",\r\n\t\t\"answer2\": \"knight2\",\r\n\t\t\"answer3\": 
    \"knight3\"\r\n\t\t}\r\n\t]\r\n}

А затем я использую JsonUtility.FromJson (dataAsjJson)Это мои объекты классов:

    public class Question
    {
     public string text { get; set; }
     public string correct { get; set; }
     public string answer1 { get; set; }
     public string answer2 { get; set; }
     public string answer3 { get; set; }
    }
    public class RootObject
    {
        public List<Question> questions { get; set; }
    }

Как вы можете видеть, тело json это только "вопрос" с массивом.На Debug.log (dataAsJson) это выглядит нормально:

    {
        "question":
        [
            {
            "text": "głośniki",
            "correct": "speaker",
            "answer1": "speaker1",
            "answer2": "speaker2",
            "answer3": "speaker3"
            },
            {
            "text": "pustynia",
            "correct": "desert",
            "answer1": "desert1",
            "answer2": "desert2",
            "answer3": "deser3"
            },
            {
            "text": "rycerz",
            "correct": "knight",
            "answer1": "knight1",
            "answer2": "knight2",
            "answer3": "knight3"
            }
        ]
    }

Мне нужно успешно преобразовать его в объект C #.

1 Ответ

0 голосов
/ 10 апреля 2019

Как упомянуто Эми в комментариях, ваша структура класса C # не соответствует вашему JSON, я использую http://json2csharp.com/, потому что это точно и быстро.Убедитесь, что вы поставили [Serializable] над каждым классом, чтобы мы могли преобразовывать структуры данных или состояния объектов в формат, который Unity может хранить и восстанавливать позже. Подробнее здесь .И, наконец, я бы избегал геттеров и сеттеров в этой структуре, это вызовет проблемы с сериализацией, и рекомендуется использовать вместо этого единство.

[Serializable]
public class Question
{
    public string text;
    public string correct;
    public string answer1;
    public string answer2;
    public string answer3;
}
[Serializable]
public class RootObject
{
    public List<Question> question;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...