Unity c# jsonUtility функции не работают - PullRequest
0 голосов
/ 12 марта 2020

Хотите преобразовать объект в json строку и обратно.

Мой объект:

[Serializable]
public class Save
{
    public Levels PlayerLvl { get; set; }
    public int Kills { get; set; }
}

Функция в коде:

testfunction(Save savedata) {
    //(int)savedata.PlayerLvl equals 1
    //savedata.Kills equals 5
    string json = JsonUtility.ToJson(savedata);
    debug.log(json) // json equals "{}"
}

То же самое происходит, когда я получаю json строку и хочу преобразовать ее обратно:

testFunction(string jsonstring) {
    //jsonstring is a valid json string that equals Save object
    Save savedata = JsonUtility.FromJson<Save>(jsonstring);
    // savedate equals a new Save object without content
}

что здесь не так?


Редактировать:

Json, что Я получаю:

{
    "Kills": 5,
    "PlayerLvl": 1
}

Уровни enum:

public enum Levels {
    Level1 = 1,
    Level2 = 2
}

1 Ответ

0 голосов
/ 12 марта 2020

См. Руководство: JSON Сериализация

Поддерживаемые типы

API-интерфейс сериализатора JSON поддерживает любые MonoBehaviour subclass, ScriptableObject subclass или обычный класс или структура с атрибутом [Serializable]. Когда вы передаете объект в стандартный сериализатор Unity для обработки, применяются те же правила и ограничения, что и в Инспекторе: Unity сериализует только поля ; и такие типы, как Dictionary<>, не поддерживаются.

Unity не поддерживает передачу других типов напрямую в API, таких как примитивные типы или массивы. Если вам нужно преобразовать их, оберните их в некоторый класс или структуру.

Поэтому вы хотите удалить все {get; set;}, чтобы использовать поля, а не свойства

[Serializable]
public class Save
{
    public Levels PlayerLvl;
    public int Kills;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...