如何使用C#在Unity中使用JsonUtility从给定的JSON格式获取数据?

时间:2018-12-20 11:32:44

标签: c# json unity3d

{
"page": 2,
"per_page": 3,
"total": 12,
"total_pages": 4,
"data": [
    {
        "id": 4,
        "first_name": "Eve",
        "last_name": "Holt",
        "avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/marcoramires/128.jpg"
    },
    {
        "id": 5,
        "first_name": "Charles",
        "last_name": "Morris",
        "avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/stephenmoon/128.jpg"
    },
    {
        "id": 6,
        "first_name": "Tracey",
        "last_name": "Ramos",
        "avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/bigmancho/128.jpg"
    }
]

}

上面的JSON是我尝试测试的格式,因此我将其添加到字符串中但显示错误。因此我将其编辑为以下代码,删除了双引号并添加了单引号,现在错误消失了。不确定使用单引号或双引号。

string JSONDataString;
JSONDataString = @"{
'page': 2,
'per_page': 3,
'total': 12,
'total_pages': 4,
'data': [
    {
        'id': 4,
        'first_name': 'Eve',
        'last_name': 'last_name',
        'avatar': 'https://s3.amazonaws.com/uifaces/faces/twitter/marcoramires/128.jpg'
    },
    {

        'id': 5,
        'first_name': 'Charles',
        'last_name': 'Morris',
        'avatar': 'https://s3.amazonaws.com/uifaces/faces/twitter/stephenmoon/128.jpg'

    },
    {

        'id': 6,
        'first_name': 'Tracey',
        'last_name': 'Ramos',
        'avatar': 'https://s3.amazonaws.com/uifaces/faces/twitter/bigmancho/128.jpg'

    }
]
}";

我在字符串的开头使用了@,但我不知道为什么在某些示例中看到了为什么使用它;我删除了所有双引号并添加了单引号;我创建了另一个类来处理来自下面给出的JSON

public class DataHandler {


public int id;
public string firstname;
public string lastname;
public string avatar;

public DataHandler(int ID,string FName,string LName,string Avatar)
{
    this.id = ID;
    this.firstname = FName;
    this.lastname = LName;
    this.avatar = Avatar;

}


}

如何从第一个数组和第二个数组中提取数据。第一个数组元素的意思是(page,per_page ... total_pages)。第二个数组意思是(id,first_name,last_name,来自三个组的化身)?

var obj = JsonUtility.FromJson<DataHandler>(JSONDataString);

2 个答案:

答案 0 :(得分:1)

表示JSON的类错误。 请参见下面的正确表示形式:

public void ImportCertificate(StoreName storeName,
    StoreLocation location,
    byte[] certificateData)
{
    X509Store x509Store = new X509Store(storeName, location);
    X509Certificate2 certificate = new X509Certificate2(certificateData);
    x509Store.Open(OpenFlags.ReadWrite);
    x509Store.Add(certificate);
    x509Store.Close();
}

别忘了将您的课程标记为可序列化。 使用属性:

public class Datum
{
    public int id { get; set; }
    public string first_name { get; set; }
    public string last_name { get; set; }
    public string avatar { get; set; }
}

public class RootObject
{
    public int page { get; set; }
    public int per_page { get; set; }
    public int total { get; set; }
    public int total_pages { get; set; }
    public List<Datum> data { get; set; }
}

用法

[System.Serializable]

答案 1 :(得分:0)

您表示对象的类不正确。您可以在视觉工作室“编辑>选择性粘贴> JSON作为类粘贴”中从json生成一个类。

在您的情况下是

public class Rootobject
    {
        public int page { get; set; }
        public int per_page { get; set; }
        public int total { get; set; }
        public int total_pages { get; set; }
        public Datum[] data { get; set; }
    }

    public class Datum
    {
        public int id { get; set; }
        public string first_name { get; set; }
        public string last_name { get; set; }
        public string avatar { get; set; }
    }

您的“ JSONDataString” json字符串看起来不错,因此只需使用“ Newtonsoft.Json” nuget来解析对象:

var data = JsonConvert.DeserializeObject<Rootobject>(json);