在没有插件的情况下解析JSON

时间:2016-07-22 00:12:07

标签: c# json

所以我有一些Json:

{
    "name": "Shadow Realm",
    "description": "A spooky Haloween inspired map",
    "map": {
      "version": 79,
      "color_palette": [
       {
          "r": 96,
          "g": 209,
          "b": 234,
          "a": 255
       },
       {
          "r": 255,
          "g": 55,
          "b": 55,
          "a": 255
       }]
    }
}

我能够阅读前几个值,但是我无法阅读该版本,我不确定我应该阅读地图条目,任何想法? 我宁愿不必使用插件,因为我希望尽可能小的项目,如果可行的话。

using UnityEngine;
using System.Collections;
using System.Reflection;
using System.Linq;
using System;

[System.Serializable]
public class Tests : MonoBehaviour
{
    private string jsonMapData;

    void Start()
    {
        jsonMapData = Import_bnl_bin.LoadResourceTextfile("map.json");
        MyClass jsonMap = new MyClass();
        jsonMap = JsonUtility.FromJson<MyClass>(jsonMapData);

        Debug.Log("Name " + jsonMap.name + " : Desc " + jsonMap.description + " : Version " + jsonMap.version);
    }

    public class MyClass
    {
        public string name;
        public string description;

        public int version;
    }
}

2 个答案:

答案 0 :(得分:1)

使用http://json2csharp.com我使用您的示例JSON文档生成了以下类。

public class ColorPalette
{
    public int r { get; set; }
    public int g { get; set; }
    public int b { get; set; }
    public int a { get; set; }
}

public class Map
{
    public int version { get; set; }
    public List<ColorPalette> color_palette { get; set; }
}

public class RootObject
{
    public string name { get; set; }
    public string description { get; set; }
    public Map map { get; set; }
}

我不熟悉JsonUtility,但我的猜测是你会替换这一行:

jsonMap = JsonUtility.FromJson<MyClass>(jsonMapData);

有了这个:

jsonMap = JsonUtility.FromJson<RootObject>(jsonMapData);

或者您可以将RootObject重命名为MyClass

答案 1 :(得分:1)

似乎这些类需要可序列化

[Serializable]
public class Map
{
    public int version;
    public List<ColorPalette> color_palette;
}

否则它无法读取数据,我最终也删除了

{ get; set; } 

因为它超越了

.FromJson()

功能并使其返回null