只是一个快速的!
我有三个对象类。
public class Parent
{
public string name { get; set; }
public Children child{ get; set; }
}
public class Children
{
public Dictionary<string, item> item{ get; set; }
}
public class item
{
public string id { get; set; }
public string type { get; set; }
}
我正在使用的 JSON 字符串:
{
'name': 'Child1',
'Children': {
'item-1253': {
'id': 'car',
'type': 'car'
},
'item-4343': {
'id': 'car',
'type': 'car'
}......
}
}
使用:
test = JsonConvert.DeserializeObject<Parent>(json);
输出为 "item": null
.我能问为什么吗?我如何访问此项目对象中的所有属性,因为每个子项目将有多个项目,并且项目对象名称是动态的,例如 item_id12434
.我希望对象是独立的,我如何实现这一点?这样的事情会起作用吗? List<Dictionary<string, item>>
固定示例:https://dotnetfiddle.net/7TK008
请看一下工作示例 - https://dotnetfiddle.net/eiMEkr
你提出了两个问题:
-
错误的参数名称 孩子 - 应该是孩子
-
字典对象的错误定义
const string json = @"
{
'name':'Child1',
'child':{
'item':{
'dict_item':{
'id':'car1',
'type':'car2'
}
}
}
}";
var test = JsonConvert.DeserializeObject<Parent>(json);
将类修改为如下所示,它将正确反序列化。
public static class Program
{
static void Main(string[] args)
{
string str = @"{
'name': 'Child1',
'Children': {
'item-1253': {
'id': 'car',
'type': 'car'
},
'item-4343': {
'id': 'car',
'type': 'car'
}
}
}";
// Way 1) Using POCO
Parent parent = JsonConvert.DeserializeObject<Parent>(str);
// Way 2) Using dynamic
dynamic deserializedDynamicObject = JsonConvert.DeserializeObject<dynamic>(str);
// Way 3) Using JObject
JObject deserializedJObject = JsonConvert.DeserializeObject<JObject>(str);
List<JObject> childrenObjects = deserializedJObject["Children"]
.Cast<JProperty>()
.Select(x => x.Value)
.Cast<JObject>()
.ToList();
}
}
public class Parent
{
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("Children")]
public Dictionary<string, Item> Children { get; set; }
}
public class Item
{
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("type")]
public string Type { get; set; }
}