从c#中的json对象列表创建一个Dictionary <string,list <string =“”>或类似的东西

时间:2015-12-04 12:34:30

标签: c# json linq list dictionary

嘿,你怎么能把json obects变成字典或类似的东西?

这是我的json身体:

 {
"name": "person1",
"listOne": [{
    "name": "list1",
    "description": "",
    "listTwo": [{
        "name": "object1"
    }, {
        "name": "object2"
    }, {
        "name": "object3"
    }]
}, {
    "name": "list2",
    "description": "",
    "listTwo": [{
        "name": "object1"
    }, {
        "name": "object2"
    }]
}]

}

这是课程:

 public class JsonObject()
 {
      public string Name { get; set;}
      public string Description { get; set;}
      public List<string> MyList { get; set; }
 }

 public class MyList()
 {
      public string Name { get; set; }
 }

问题是我无法从MyList中选择Name属性!在我的xaml页面上,我看到了App1.Model.MyList。

如何显示MyList类中属性Name的值?

在我的ViewModel中,这是我的List,我将返回xamlpage:

 private ObservableCollection<JsonObject> _ObjectList = new ObservableCollection<JsonObject>();
 public ObservableCollection<JsonObject> ObjectList
 {
     get
     {
         return _ObjectList;
     }
     set
     {
         _ObjectList = value;
         RaisePropertyChanged("ObjectList");
     }
 }

所以我想也许可以创建一个功能并添加这个值,但是我无法从MyList类到达属性Name ....

2 个答案:

答案 0 :(得分:0)

您可以使用http://json2csharp.com之类的服务为任何JSON生成C#类结构。

在这种情况下,它会是这样的:

public class ListTwo
{
    public string name { get; set; }
}

public class ListOne
{
    public string name { get; set; }
    public string description { get; set; }
    public List<ListTwo> listTwo { get; set; }
}

public class RootObject
{
    public string name { get; set; }
    public List<ListOne> listOne { get; set; }
}

如果更改属性的大小写/名称,则必须添加DataContractAttribute,其中包含JSON模型中使用的更正名称。当然,如果您需要,它取决于您的序列化器。

答案 1 :(得分:0)

为什么不反序列化为相同的c#类型 -

public class ListTwo
{
   public string name { get; set; }
}

public class ListOne
{
    public string name { get; set; }
    public string description { get; set; }
    public List<ListTwo> listTwo { get; set; }
}

public class RootObject
{
    public string name { get; set; }
    public List<ListOne> listOne { get; set; }
}

刚刚反序列化 -

var typed = JsonConvert.DeserializeObject<RootObject>(json);