一个快速的!
我有三个对象类。
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>>
答案 0 :(得分:0)
修改您的类使其看起来像这样,它将正确反序列化。
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; }
}
答案 1 :(得分:0)
已修复示例: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);