То, что я всегда делаю при загрузке Jsons, никогда не пишу их вручную.Я создаю экземпляр того, что я хочу сначала записать в память, а затем СОХРАНИТЬ в json - чтобы убедиться, что макет поля точно соответствует ожидаемому сериализатором - легко написать json, который действителен, но не имеет смыслапри сопоставлении с классом C #
В вашем случае ответ прост.в структуре Json у вас есть
{ field_name : field_value }
пар.Но когда он говорит «1»: значение, он никогда не будет десериализован, потому что имя поля - «1», которое не является допустимым именем поля в C # (оно должно начинаться с буквы).Объект определения, который вы десериализуете, должен выглядеть следующим образом:
class MyStats
{
public int Armor;
public int Strenght;
public int Mana;
public int Power;
public int Health;
}
Я полагаю, что это неправильно, однако для десериализации вашего примера ваш контейнерный объект должен быть определен следующим образом (что неверно)
class MyContainerObject {public MyStats 1;// ОШИБКА: Неверное имя поля!общедоступные MyStats 2;// ОШИБКА: Неверное имя поля!}
Он не возвращает ошибку, так как Json действителен, и анализатор просто пропускает поля, которые не соответствуют определению класса, которое вы используете.
Относительно использования массивов вы можетелибо взломайте расширение-обертку (как предложено Dharmashree), что немного странно (JsonUtility нужно знать конкретный класс, к которому он десериализуется, и он не может перейти непосредственно к массиву или списку, например:
[
{"a": 1 },
{"b": 1 },
{"c": 1 }
]
Будучи действительным json, он не будет анализироваться JsonUtility (необработанный анонимный массив), однако это будет
{
"MyStats": [
{ "a": 1 },
{ "b": 2 },
{ "c": 1 }
]
}
, вы можете структурировать ваши данные так, чтобы они содержали массив внутри объекта контейнера, поэтомуВаш основной объект может быть определен следующим образом:
class MyContainerObject
{
public MyStats[] stats;
}
Доступ к вашим элементам осуществляется через myList [index]
В любом случае, я снова рекомендую начать с НАПИСАНИЯ json, представляющего вашу структуру,проверять, работает ли эта десериализация должным образом, и только затем редактировать файл вручную.