【发布时间】:2020-03-16 03:09:00
【问题描述】:
我必须反序列化来自具有以下结构的 api 的响应:
[
{
"starttime": "...",
"endtime": "....",
"var1": {},
"var2": {}
},
{
"starttime": "...",
"endtime": "....",
"var1": {},
"var3": {}
},
{
"starttime": "...",
"endtime": "....",
"var1": {}
}
]
一些见解:
- JSON 是一个对象数组
- 数组中的每个对象都将始终具有“starttime”和“endtime”属性
- 对象“var1”、“var2”、“var3”在它们内部总是具有相同的属性...但问题是对象键(var1、var2 或 var3)是动态的。它可以是任何字符串,而且这种对象的数量是动态的(我可以有 3 个或零个“var”对象)。
我在想这样的事情,将 JSON 字符串反序列化为具有属性“starttime”、“endtime”的对象列表和包含所有“var”对象的字典。
public class MyResponse
{
[JsonProperty(PropertyName = "starttime")]
public string StartTime { get; set; }
[JsonProperty(PropertyName = "endtime")]
public string EndTime { get; set; }
public Dictionary<string, VarObject> VarData { get; set; }
}
但 VarData 属性始终为空。
有人试过这样的吗?
【问题讨论】:
-
您可以将整个 JSON 反序列化为
List<Dictionary<string, object>> -
@DavidG 是的,这会起作用,但是我需要访问所有属性(甚至是开始时间和结束时间,我知道它们将永远存在)作为字典的键......这确实似乎不是最干净的解决方案。
-
它可能不是特别干净,但你的 JSON 在这方面也不是特别干净。
-
@HimBromBeere 所以你说要制作我自己的转换器?在您发送的示例中,在 ReadJson 方法中,这个人已经知道他的属性将被命名为“type”。我的问题是我不知道名字,它可能是“var1”,也可能是“pepe”
标签: c# serialization json.net deserialization