Unity中是否可以将JSON字符串解析为具有-假设-字符串列表的C#类?
我有一个从服务器获取大量数据的应用程序。该数据来自JSON,并且具有很多字段。有些字段包含另一个数组(我知道里面有一个数组,没有的数组)。
知道这一点后,我想将其放入一个类中,以便可以访问其参数,[我无法创建数组并尝试访问-例如-arr [0],因为arr [0]可能不是我想要的字段-鉴于数组位置可以更改,但是field-key(如果数组内部有数组,则为field-field-key)值不会]
{
"success": "1",
"menus": [
{
"id_menu": "506",
"nome": "Blog",
"tipo": "blog"
},
{
"id_menu": "510",
"nome": "Sobre",
"tipo": ""
},
{
"id_menu": "2407",
"nome": "(Projeto Quatro Artes)",
"tipo": ""
},
{
"id_menu": "2603",
"nome": "(Loja)",
"tipo": ""
},
{
"id_menu": "2687",
"nome": "(Material NA)",
"tipo": ""
},
{
"id_menu": "2818",
"nome": "(Forms)",
"tipo": ""
},
{
"id_menu": "2826",
"nome": "(PHP+PIZZA)",
"tipo": ""
},
{
"id_menu": "7728",
"nome": "(Image)",
"tipo": ""
},
{
"id_menu": "3239",
"nome": "(jc)",
"tipo": ""
},
{
"id_menu": "6024",
"nome": "(assinatura)",
"tipo": ""
}
]
}
上面的代码是我要解析的JSONS之一,下面的代码是我对其进行解析的类。现在我只需要知道如何去做。
[System.Serializable]
public class Menu
{
public string id_menu { get; set; }
public string nome { get; set; }
public string tipo { get; set; }
}
[System.Serializable]
public class Return
{
public string success { get; set; }
public List<Menu> menus { get; set; }
}
我知道,如果没有任何列表,则JsonUtility.FromJson()可以完成此工作,但是对于列表,它只是行不通 另外,尝试从Unity资产中使用JSONObject也不起作用,因为我无法访问return.menus.tipo(例如),因为它没有关联索引。
答案 0 :(得分:1)
是使用Json.NET
还是另一个完全支持任意类型的反序列化器?
public class MyClass
{
public string id_menu { get; set; }
public string nome { get; set; }
public string tipo { get; set; }
public List<string> my_list {get; set; }
}
var result = JsonConvert.DeserializeObject<MyClass>(json);
答案 1 :(得分:0)
如果您尝试通过Unity解析Json,则可以使用JsonUtility.FromJson(jsonString),它将Json解析为可以处理的对象,但我从未尝试使用复杂的JSON。
或者您可以遍历json并搜索所需的键值,但这肯定会增加内存消耗。
答案 2 :(得分:0)
您可以通过以下方式进行操作:
var returnObj = JsonConvert.DeserializeObject<Return>(json);
为此,您需要以下软件包: Newtonsoft.Json
我制作了一个小型控制台应用程序,向您展示了方法。在Unity中应该相同:
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Text;
namespace IoException
{
[System.Serializable]
public class Menu
{
public string id_menu { get; set; }
public string nome { get; set; }
public string tipo { get; set; }
}
[System.Serializable]
public class Return
{
public string success { get; set; }
public List<Menu> menus { get; set; }
}
public class JsonExercise
{
public static void Main(string[] args)
{
var currentLine = Console.ReadLine();
var sb = new StringBuilder();
while (currentLine != "END")
{
sb.AppendLine(currentLine);
currentLine = Console.ReadLine();
}
var json = sb.ToString().Trim();
var returnObj = JsonConvert.DeserializeObject<Return>(json);
Console.WriteLine();
}
}
}
有关控制台应用程序的注释,以备不时之需: