将Newtonsoft.Json.Linq.JArray转换为特定对象types的列表

我有以下{Newtonsoft.Json.Linq.JArray}types的variables。

 properties["Value"] {[ { "Name": "Username", "Selected": true }, { "Name": "Password", "Selected": true } ]} 

我想完成的是将其转换为List<SelectableEnumItem>其中SelectableEnumItem是以下types:

 public class SelectableEnumItem { public string Name { get; set; } public bool Selected { get; set; } } 

我对编程相当内疚,我不确定这是否可能。 任何工作示例的帮助将不胜感激。

只要调用array.ToObject<List<SelectableEnumItem>>()方法即可。 它会返回你所需要的。

文档: 将JSON转换为types

在问题中的例子是一个简单的情况下,属性名称完全匹配在JSON和代码中。 如果属性名称不完全匹配,例如json中的属性是"first_name": "Mark"并且代码中的属性是FirstName那么使用Select方法如下

 List<SelectableEnumItem> items = ((JArray)array).Select(x => new SelectableEnumItem { FirstName = (string)x["first_name"], Selected = (bool)x["selected"] }).ToList(); 

我可以想到不同的方法来实现相同的

 IList<SelectableEnumItem> result= array; 

或者(我有一些情况,这一个不好)

 var result = (List<SelectableEnumItem>) array; 

或者使用linq扩展

 var result = array.CastTo<List<SelectableEnumItem>>(); 

要么

 var result= array.Select(x=> x).ToArray<SelectableEnumItem>(); 

或更明确地说

 var result= array.Select(x=> new SelectableEnumItem{FirstName= x.Name, Selected = bool.Parse(x.selected) }); 

请注意在上面的解决scheme我用dynamic对象

我可以想到更多的解决scheme是上述解决scheme的组合。 但我认为它涵盖了几乎所有可用的方法。

我自己使用第一个