创建词典<;字符串,列表<;字符串>;或者类似于c#中json对象列表中的内容

本文关键字:列表 字符串 lt json 对象 gt 创建 或者 类似于 | 更新日期: 2023-09-27 18:25:42

嘿,你怎么能把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中,这是我返回到xamlpage的列表:

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

所以我想也许可以创建一个disctionary并将thise值添加到其中,但我无法从MyList类中获取属性Name。。。。

创建词典<;字符串,列表<;字符串>;或者类似于c#中json对象列表中的内容

您可以使用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; }
}

如果更改属性的大小写/名称,则必须添加一个具有JSON模型中使用的相应名称的DataContractAttribute。当然,如果需要的话,这取决于您的序列化程序。

为什么不反序列化为相同的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);