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

C# 反序列化名称未知的JSON对象,c#,json,C#,Json,我有一个像这样的json { "result": "success", "response_code": 200, "message": "", "collection": { "<channel_id>": { "<category_id>": { "id_category": "<category_id>",

我有一个像这样的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>"
                     }
               }
            }
} 
{
“结果”:“成功”,
“响应代码”:200,
“电文”:“,
“收集”:{
"": {
"": {
“id_类别”:“,
“名称”:“,
“创建日期”:”
},
"": {
“id_类别”:“,
“名称”:“,
“创建日期”:”
}
}
}
} 

哪个频道id和类别id不是固定名称。如何在C#上对其进行反序列化?

假设其他所有内容都已基本固定,您可以尝试按照以下思路对此进行建模:

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; }
    }
您可以访问特定字段,如下所示:

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

如果使用动态类型而不是静态类型,则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);
    }
}

但是频道id呢?是否不需要在类中编写channel_id?如果我正确阅读了需求,channel_id是一个占位符,但可以是任何字符串。如果这是正确的(如果不是-完全忽略我的答案),用实际字符串替换
SOME\u CHANNEL\u ID
位(与
SOME\u CATEGORY\u ID
相同),这将起作用。
class Program
{
    static void Main(string[] args)
    {
        var json = File.ReadAllText("file.json");

        dynamic obj = JObject.Parse(json);

        Console.WriteLine(obj.collection.channel_id);
    }
}