不使用插件解析JSON

本文关键字:JSON 插件 | 更新日期: 2023-09-27 17:58:12

所以我有一些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;
    }
}

不使用插件解析JSON

使用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

似乎类需要是可序列化的

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

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

{ get; set; } 

因为它正在压倒

.FromJson()

函数并使其返回空