解析 json 个不确定的数据

Parse json that have uncertain number of data

如何解析 json 具有未知的资产对象?

作为

{   
    "ClassName": "Excel",
    "Teacher": "Esther",
    "Student": 50,
    "Aircond": 0,
    "Assets": {
        "Chair": 50,
        "Table": 50,
        "Fan": 2,
        and might be more here and is unknown to me
    }
}

您可以使用 dynamic 作为 Assets 类型:

public class RootObject
{
    public string ClassName { get; set; }
    public string Teacher { get; set; }
    public int Student { get; set; }
    public int Aircond { get; set; }
    public dynamic Assets { get; set; }
}

然后

RootObject ro = JsonConvert.DeserializeObject<RootObject>(json);

如果您确定 Assets 只是一堆具有不同类型值的键,那么您可以使用 IDictionary<string, object> 来存储 Assets:

public class MyClass
{
    public string ClassName { get; set; }
    public string Teacher { get; set; }
    public int Student { get; set; }
    public int Aircond { get; set; }
    public IDictionary<string, object> Assets { get; set; }
}

var myClass = JsonConvert.DeserializeObject<MyClass>(json);

如果您只想解析 JSON 而不创建自定义 C# 对象,您可以使用 JObject.Parse.

string json = "{\n\t\"ClassName\": \"Excel\",\n\t\"Teacher\": \"Esther\",\n\t\"Student\": 50,\n\t\"Aircond\": 0,\n\t\"Assets\": {\n\t\t\"Chair\": 50,\n\t\t\"Table\": 50,\n\t\t\"Fan\": 2,\n\t\t\"More\": \"randomText\"\n\t}\n}";
var jObject = JObject.Parse(json);
Console.WriteLine(jObject["Assets"]["More"]);

您将需要 Newtonsoft.Json,您可以从 NuGet 安装它。