2016-07-22 3 views
0

Так у меня есть некоторые 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; 
    } 
} 
+0

Если вы беспокоитесь о размере проекта, могу предложить [SimpleJSON] (http://wiki.unity3d.com/index.php/SimpleJSON) или [MiniJSON] (https://gist.github.com/darktable/1411710) – Bill

ответ

1

, кажется, что классы нужно сериализовать

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

в противном случае он не сможет прочитать данные, и я в конечном итоге удаления

{ get; set; } 

как это переопределение

.FromJson() 

funtion и вызывает его возврат

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 ,

+0

Итак, класс внутри класса имеет смысл, однако по какой-то причине 'Debug.log()' не может получить доступ к этому 'public string name {get; задавать; } ' так же, как это было бы ' public string name; ' Либо я обращаюсь к нему неправильно, либо данные не сохраняются правильно – Alpha

+0

Также' Debug.log (jsonMap.map.version) 'выбрасывает исключение с помощью null reference , – Alpha

+0

Как я уже сказал, не знакомы с 'JsonUtility', поэтому, возможно, в нем есть ошибка, которая не обрабатывает классы внутри классов. Это отлично разбирается с использованием JSON.NET, поэтому действует JSON (предполагая, что вы опубликовали именно то, что вы используете). Я предполагаю, что 'JsonUtility' является частью Unity3d, но не хочется загружать и устанавливать все, чтобы попробовать сами. –

Смежные вопросы