首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JsonFx取消版本化返回null unity3d

JsonFx取消版本化返回null unity3d
EN

Stack Overflow用户
提问于 2016-02-10 18:48:14
回答 1查看 132关注 0票数 1

当我尝试使用JsonFxJson字符串进行反序列化时,收到的值为null。

这是我的Json字符串

代码语言:javascript
复制
{
  "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
EN

回答 1

Stack Overflow用户

发布于 2016-02-10 18:57:28

我觉得你的json和你想要的不匹配。在你的例子中,我认为你期望红色,蓝色,绿色是DemiGods对象,其中红色,蓝色,绿色是它们的名字。

但json目前的做法是,它希望Red、Blue、Green都是类型。

代码语言:javascript
复制
    {
    "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 (至少我认为是这样)

代码语言:javascript
复制
{
    "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:

代码语言:javascript
复制
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是如何工作的,但我猜大概是这样的:

代码语言:javascript
复制
public class JsonData:MonoBehaviour{

    public RootObject root;
    void Start(){   
         root = JsonFX.Deserialize<RootObject>(jsonFile);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35313083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档