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

4
我有这样的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# 中进行反序列化?
2个回答

2
假设其他方面基本确定,你可以尝试按照以下方式对其进行建模:
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";

但是 channel_id 呢?channel_id 不需要写在类里面吗? - albilaga
如果我正确理解了要求,channel_id是一个占位符,但可能是任何字符串。如果是这样(如果不是,请完全忽略我的答案),请将“SOME_CHANNEL_ID”位替换为实际字符串(与“SOME_CATEGORY_ID”相同),然后它就可以工作了。 - decPL

-1

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接