您将如何统一获得这些数据

时间:2019-08-26 23:15:46

标签: json unity3d

{"country":{"code":"NZ"}}

您如何将这些数据存储在统一类中?

类似这样的东西:

using UnityEngine;
using System;
using System.Collections;
using System.Globalization;

[Serializable]
public class GDRPClass
{
    public string country;
    public string code;
}

我不认为这适合双{}。

谢谢

3 个答案:

答案 0 :(得分:1)

始终是一个很好的起点:json2csharp

只需确保使用字段而不是属性并标记起止符val adapter = AutoCompleteTextViewCustomAdapter(context!!, R.layout.list_row_text, dataList).also { //Setup the OnClickListener what to perform when the TextView of the Adapter if being onClick it.setListener(object : AutoCompleteTextViewCustomAdapter.IOnItemListener { override fun onLongClick(dataReceived: String) { // DO SOMETHING } override fun onSingleClick(dataReceived: String) { // DO SOMETHING } }) } // Set the adapter to the AutoCompleteTextView View that define in your XML File autoCompleteTextView.setAdapter(adapter)

[Serializable]

您可以随意调用类/结构,但字段名称必须匹配!


在这种简单的情况下,由于data types in JSON的局限性非常容易解释结构。如果使用预期的符号,则可以更好地看到它

[Serializable]
public class Country
{
    public string code;
}

[Serializeable]
public class GDRPClass
{
    public Country country;
}
    json中的
  • { "country" : { "code" : "NZ" } } 总是包装一个json对象(= class / struct)。因此,您已经知道在您的情况下确实必须有两种类/结构类型。

  • 您会看到第一个(根)类型必须有一个名为{ }的字段。此字段的类型是其他类/结构的类型。

  • 第二种内部类型具有另一个称为country的字段。类型为code

这正是json2csharp已经为我们吐出的东西;)


现在您可以例如使用JsonUtility.FromJson

string

,然后使用例如

访问数据
var json = "{\"country\":{\"code\":\"NZ\"}}";
var jsonObject = JsonUtility.FromJson<GDRPClass>(json);

答案 1 :(得分:0)

“国家” 基本上用作“ {” code“:” NZ“}” 的键,因此它们位于树的不同级别。

您可以将其反序列化为Dictionary<string, CountryInfo>(但不能与内置的JsonUtility一起使用,因为它不执行Dictionary,所以我改用Json .Net)

看看:

using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using UnityEngine;

public class TestDeserialize : MonoBehaviour {
    [SerializeField] private string m_JsonStr = "{\"New Zealand\":{\"code\":\"NZ\"}}";

    void Start() {
        Dictionary<string,CountryInfo> result = JsonConvert.DeserializeObject<Dictionary<string, CountryInfo>>(m_JsonStr);

        foreach (KeyValuePair<string,CountryInfo> country in result) { //Log results
            Debug.LogFormat("{0}: {1}", country.Key, country.Value.code);
        }

        Debug.Log(JsonConvert.SerializeObject(result)); //Serializes back into its original form
    }

    [Serializable]
    class CountryInfo {
        public string code;
    }
}

答案 2 :(得分:0)

我使用Pathfinding.Serialization.JsonFx进行Json解析

{\“ country \”:4,\“ code \”:\“阿富汗\”} [关于您的Model类,这将是jsonString]

GDRPClass data = JsonReader.Deserialize<GDRPClass>JsonWriter.Serialize(jsonString));