Возвращение JsonFx к возвращению null unity3d
Когда я пытаюсь десериализовать Json
использование строки JsonFx
Я получаю значение NULL.
Вот мой Json String
{
"PlayerID": 123,
"PlayerName": "Avi",
"DemiGods": {
"Red": {
"Name": "Red",
"Level": 20,
"Attack": 5,
"Dodge": 1,
"Defence": 10,
"Speed": 10
},
"Blue": {
"Name": "Blue",
"Level": 20,
"Attack": 5,
"Dodge": 1,
"Defence": 10,
"Speed": 10
},
"Green": {
"Name": "Green",
"Level": 20,
"Attack": 5,
"Dodge": 1,
"Defence": 10,
"Speed": 10
},
"Light": {
"Name": "Light",
"Level": 20,
"Attack": 5,
"Dodge": 1,
"Defence": 10,
"Speed": 10
},
"Dark": {
"Name": "Dark",
"Level": 20,
"Attack": 5,
"Dodge": 1,
"Defence": 10,
"Speed": 10
}
},
"PlayerGrid": {
"Red": {
"x": 0,
"y": 1
},
"Blue": {
"x": 1,
"y": 1
},
"Green": {
"x": 2,
"y": 1
},
"Light": {
"x": 2,
"y": 2
},
"Dark": {
"x": 3,
"y": 2
}
},
"AIGrid": {
"Red": {
"x": 0,
"y": 1
},
"Blue": {
"x": 1,
"y": 1
},
"Green": {
"x": 2,
"y": 1
},
"Light": {
"x": 2,
"y": 2
},
"Dark":
{
"x": 3,
"y": 2
}
}
}
This is my class where i stores the data from Json
public class UnitsInfo :MonoBehaviour
{
public string PlayerName;
public int PlayerID;
public List<DemiGods> demigodslist = new List<DemiGods>();
public List<GridData> playerGridlist = new List<GridData>();
public List<GridData> AIGridList = new List<GridData>();
public UnitsInfo()
{
Debug.Log("Default Constructor");
}
public UnitsInfo(string _name, int id, List<DemiGods> Godlist, List<GridData> plist, List<GridData> AIlist)
{
PlayerName = _name;
PlayerID = id;
demigodslist = Godlist;
playerGridlist = plist;
AIGridList = AIlist;
}
public class DemiGods
{
public string Name;
public int Level;
public float Attack;
public float Dodge;
public float Defence;
public float Speed;
public DemiGods()
{
Debug.Log("DemIGOds DeFALUT ConsTruCtoR");
}
public DemiGods(string _name, int _lvl, float _attack, float _dodge, float _Defence, float _speed)
{
Name = _name;
Level = _lvl;
Attack = _attack;
Dodge = _dodge;
Defence = _Defence;
Speed = _speed;
}
}
public class GridData
{
public Vector2 pos;
public GridData() { Debug.Log("Grid DAta DeFALUT ConsTruCtoR"); }
public GridData(int x, int y)
{
pos.x = x;
pos.y = y;
}
}
}
This is where is deserialize data
public class JsonData: MonoBehaviour
{
public string JSONString;
void Start()
{
UnitsInfo HerosList = JsonReader.Deserialize<UnitsInfo>(JSONString);
Debug.Log(HerosList);
}
}
The Debug.log return null. Where im going wrong??
Thanks in Advance
1 ответ
Я думаю, что ваш JSON не соответствует тому, что вы после. В вашем случае, я думаю, вы ожидаете, что Red, Blue, Green будут объектом DemiGods, где Red, Blue, Green - их имя.
Но, как и сейчас делает json, он ожидает, что красный, синий и зеленый будут шрифтами.
{
"PlayerID": 123,
"PlayerName": "Avi",
"DemiGods": [{
"Name": "Red",
"Level": 20,
"Attack": 5,
"Dodge": 1,
"Defence": 10,
"Speed": 10
}, {
"Name": "Blue",
"Level": 20,
"Attack": 5,
"Dodge": 1,
"Defence": 10,
"Speed": 10
}, {
"Name": "Green",
"Level": 20,
"Attack": 5,
"Dodge": 1,
"Defence": 10,
"Speed": 10
}, {
"Name": "Light",
"Level": 20,
"Attack": 5,
"Dodge": 1,
"Defence": 10,
"Speed": 10
}, {
"Name": "Dark",
"Level": 20,
"Attack": 5,
"Dodge": 1,
"Defence": 10,
"Speed": 10
}]
}
Выше DemiGods представляет собой массив объектов типа DemiGods, имя которого содержится внутри объекта. Таким образом, вам придется объявить метод для захвата итерации по массиву, пока вы не получите объект, соответствующий имени или создание словаря со строкой, DemiGods.
То же самое относится и к остальной части файла Json, очевидно.
РЕДАКТИРОВАТЬ:
Вот ваш действительный JSON (по крайней мере, я думаю)
{
"PlayerID": 123,
"PlayerName": "Avi",
"DemiGods": [{
"Name": "Red",
"Level": 20,
"Attack": 5,
"Dodge": 1,
"Defence": 10,
"Speed": 10
}, {
"Name": "Blue",
"Level": 20,
"Attack": 5,
"Dodge": 1,
"Defence": 10,
"Speed": 10
}, {
"Name": "Green",
"Level": 20,
"Attack": 5,
"Dodge": 1,
"Defence": 10,
"Speed": 10
}, {
"Name": "Light",
"Level": 20,
"Attack": 5,
"Dodge": 1,
"Defence": 10,
"Speed": 10
}, {
"Name": "Dark",
"Level": 20,
"Attack": 5,
"Dodge": 1,
"Defence": 10,
"Speed": 10
}],
"PlayerGrid": [{
"x": 0,
"y": 1
}, {
"x": 1,
"y": 1
}, {
"x": 2,
"y": 1
}, {
"x": 2,
"y": 2
}, {
"x": 3,
"y": 2
}],
"AIGrid": [{
"x": 0,
"y": 1
}, {
"x": 1,
"y": 1
}, {
"x": 2,
"y": 1
}, {
"x": 2,
"y": 2
}, {
"x": 3,
"y": 2
}]
}
А вот и острие:
public class DemiGod
{
public string Name { get; set; }
public int Level { get; set; }
public int Attack { get; set; }
public int Dodge { get; set; }
public int Defence { get; set; }
public int Speed { get; set; }
}
public class PlayerGrid
{
public int x { get; set; }
public int y { get; set; }
}
public class AIGrid
{
public int x { get; set; }
public int y { get; set; }
}
public class RootObject
{
public int PlayerID { get; set; }
public string PlayerName { get; set; }
public List<DemiGod> DemiGods { get; set; }
public List<PlayerGrid> PlayerGrid { get; set; }
public List<AIGrid> AIGrid { get; set; }
}
Я не совсем так, как работает JsonFX, но я думаю, что-то вроде:
public class JsonData:MonoBehaviour{
public RootObject root;
void Start(){
root = JsonFX.Deserialize<RootObject>(jsonFile);
}
}