将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的组合。 但我认为它涵盖了几乎所有可用的方法。
我自己使用第一个