【问题标题】:Parse json that have uncertain number of data解析数据数量不确定的json
【发布时间】:2016-09-05 12:50:42
【问题描述】:

如何解析具有Assets对象的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
    }
}

【问题讨论】:

标签: c# json json.net deserialization json-deserialization


【解决方案1】:

如果您确定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);

【讨论】:

    【解决方案2】:

    您可以将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);
    

    【讨论】:

      【解决方案3】:

      如果您只想解析 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 安装它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-02
        • 1970-01-01
        • 1970-01-01
        • 2019-11-28
        • 2017-08-25
        相关资源
        最近更新 更多