反序列化名称未知的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#上反序列化它?
假设其他一切都很固定,您可能会尝试按照以下几条线进行建模:
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);
}
}