C# 使用Newtonsoft.Json将名称反序列化为值
是否可以将名称反序列化为值 我有一些类似这样的JSON:C# 使用Newtonsoft.Json将名称反序列化为值,c#,json,json.net,deserialization,C#,Json,Json.net,Deserialization,是否可以将名称反序列化为值 我有一些类似这样的JSON: { "id": "106906", "data": { "SER1": { "events": [ { "timestamp": "2020-11-11T10:28:40.728600Z", "type&qu
{
"id": "106906",
"data": {
"SER1": {
"events": [
{
"timestamp": "2020-11-11T10:28:40.728600Z",
"type": "high"
}
]
},
"SER2": {
"events": [
{
"timestamp": "2020-11-11T10:28:40.728600Z",
"type": "high"
}
]
}
}
}
// Root myDeserializedClass = JsonConvert.DeserializeObject<Root>(myJsonResponse);
public class Event
{
public DateTime timestamp { get; set; }
public string type { get; set; }
}
public class Device
{
public string Id { get; set; }
public List<Event> events { get; set; }
}
public class Data
{
public List<Device> Devices { get; set; }
}
public class Root
{
public string id { get; set; }
public Data data { get; set; }
}
我使用的C#类如下所示:
{
"id": "106906",
"data": {
"SER1": {
"events": [
{
"timestamp": "2020-11-11T10:28:40.728600Z",
"type": "high"
}
]
},
"SER2": {
"events": [
{
"timestamp": "2020-11-11T10:28:40.728600Z",
"type": "high"
}
]
}
}
}
// Root myDeserializedClass = JsonConvert.DeserializeObject<Root>(myJsonResponse);
public class Event
{
public DateTime timestamp { get; set; }
public string type { get; set; }
}
public class Device
{
public string Id { get; set; }
public List<Event> events { get; set; }
}
public class Data
{
public List<Device> Devices { get; set; }
}
public class Root
{
public string id { get; set; }
public Data data { get; set; }
}
//根myDeserializedClass=JsonConvert.DeserializeObject(myJsonResponse);
公开课活动
{
公共日期时间时间戳{get;set;}
公共字符串类型{get;set;}
}
公共类设备
{
公共字符串Id{get;set;}
公共列表事件{get;set;}
}
公共类数据
{
公共列表设备{get;set;}
}
公共类根
{
公共字符串id{get;set;}
公共数据数据{get;set;}
}
我希望SER1
和SER2
映射到列表设备
,分别使用Device
的Id
获取SER1
和SER2
这可能吗?是的,可以这样做,但您需要一个自定义的
JsonConverter
来处理它
首先,你需要对你的类做一个小的调整,因为你有一个额外的层在里面。JSON中没有设备
成员——只有数据
,表示设备列表。因此,将根类更改为:
public class Root
{
public string Id { get; set; }
[JsonProperty("data"), JsonConverter(typeof(DeviceListConverter))]
public List<Device> Devices { get; set; }
}
现在,您可以像往常一样进行反序列化,它应该可以按照您的意愿工作:
var root = JsonConvert.DeserializeObject<Root>(json);
var root=JsonConvert.DeserializeObject(json);
这是一个有效的演示:不要使用
列表
,试试字典
谢谢Franz,试过了,但运气不好。。。尝试使用字典,然后查看您获得的数据(尤其是密钥),并考虑在反序列化后可以执行哪些步骤来填充id字段;)谢谢你,布莱恩,它很有魅力!!没问题;很高兴我能帮忙!