反序列化名称未知的JSON对象

本文关键字:JSON 对象 未知 反序列化 | 更新日期: 2023-09-27 18:22:25

我有类似的json

{
    "result": "success",
    "response_code": 200,
    "message": "",
    "collection": { 
        "<channel_id>": {
              "<category_id>": {
                    "id_category": "<category_id>",
                    "name": "<category>",
                    "date_created": "<date_tagged>"
                     },
               "<category_id>": {
                    "id_category": "<category_id>",
                    "name": "<category>",
                    "date_created": "<date_tagged>"
                     }
               }
            }
} 

其中channel_id和category_ id不是固定名称。如何在C#上反序列化它?

反序列化名称未知的JSON对象

假设其他一切都很固定,您可能会尝试按照以下几条线进行建模:

public class MyJsonClass
    {
        public String Result { get; set; }
        public int Response_Code { get; set; }
        public String Message { get; set; }
        public Dictionary<String, Dictionary<String, JsonCategoryDescription>>
                  Collection { get; set; }
    }
    public class JsonCategoryDescription
    {
        public String Id_Category { get; set; }
        public String Name { get; set; }
        public String Date_Created { get; set; }
    }

然后反序列化如下(System.Web.Script.Serialization命名空间):

var result = new JavaScriptSerializer().Deserialize<MyJsonClass>(myJsonString);

你可以访问特定的字段,比如:

result.Collection[SOME_CHANNEL_ID][SOME_CATEGORY_ID].Name = "XXX";

如果您使用Dynamic而不是静态类型,您可以拥有JSON文件的可变模式。这是一个工作控制台程序:

class Program
{
    static void Main(string[] args)
    {
        var json = File.ReadAllText("file.json");
        dynamic obj = JObject.Parse(json);
        Console.WriteLine(obj.collection.channel_id);
    }
}