当我尝试使用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
答案 0 :(得分:1)
我认为你的json与你所追求的并不匹配。在你的情况下,我认为你期望红色,蓝色,绿色是DemiGods对象,其中红色,蓝色,绿色是他们的名字。
但是json目前的做法是,它希望输入Red,Blue,Green。
{
"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
}]
}
这是csharp:
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);
}
}