首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将Newtonsoft.Json.Linq.JArray转换为特定对象类型的列表

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

Stack Overflow用户
提问于 2012-11-26 20:52:20
回答 5查看 288.1K关注 0票数 281

我有以下类型为{Newtonsoft.Json.Linq.JArray}的变量。

代码语言:javascript
复制
properties["Value"] {[
  {
    "Name": "Username",
    "Selected": true
  },
  {
    "Name": "Password",
    "Selected": true
  }

]}

我想要完成的是将其转换为List<SelectableEnumItem>,其中SelectableEnumItem是以下类型:

代码语言:javascript
复制
public class SelectableEnumItem
    {
        public string Name { get; set; }
        public bool Selected { get; set; }
    }

我对编程比较陌生,我不确定这是否可能。任何对工作示例的帮助都将非常感谢。

EN

回答 5

Stack Overflow用户

发布于 2015-03-23 20:40:55

问题中的示例是一个更简单的情况,其中属性名称在json和代码中完全匹配。如果属性名称不完全匹配,例如json中的属性为"first_name": "Mark",而代码中的属性为FirstName,则使用Select method,如下所示

代码语言:javascript
复制
List<SelectableEnumItem> items = ((JArray)array).Select(x => new SelectableEnumItem
{
    FirstName = (string)x["first_name"],
    Selected = (bool)x["selected"]
}).ToList();
票数 45
EN

Stack Overflow用户

发布于 2018-02-05 00:07:22

在我的例子中,API返回值如下:

代码语言:javascript
复制
{
  "pageIndex": 1,
  "pageSize": 10,
  "totalCount": 1,
  "totalPageCount": 1,
  "items": [
    {
      "firstName": "Stephen",
      "otherNames": "Ebichondo",
      "phoneNumber": "+254721250736",
      "gender": 0,
      "clientStatus": 0,
      "dateOfBirth": "1979-08-16T00:00:00",
      "nationalID": "21734397",
      "emailAddress": "sebichondo@gmail.com",
      "id": 1,
      "addedDate": "2018-02-02T00:00:00",
      "modifiedDate": "2018-02-02T00:00:00"
    }
  ],
  "hasPreviousPage": false,
  "hasNextPage": false
}

将items数组转换为客户端列表的过程如下所示:

代码语言:javascript
复制
 if (responseMessage.IsSuccessStatusCode)
        {
            var responseData = responseMessage.Content.ReadAsStringAsync().Result;
            JObject result = JObject.Parse(responseData);

            var clientarray = result["items"].Value<JArray>();
            List<Client> clients = clientarray.ToObject<List<Client>>();
            return View(clients);
        }
票数 15
EN

Stack Overflow用户

发布于 2017-02-27 18:23:53

我可以想出不同的方法来达到同样的效果。

代码语言:javascript
复制
IList<SelectableEnumItem> result= array;

或者(我遇到了一些情况,这个不能很好地工作)

代码语言:javascript
复制
var result = (List<SelectableEnumItem>) array;

或者使用linq扩展

代码语言:javascript
复制
var result = array.CastTo<List<SelectableEnumItem>>();

代码语言:javascript
复制
var result= array.Select(x=> x).ToArray<SelectableEnumItem>();

或者更明确地说

代码语言:javascript
复制
var result= array.Select(x=> new SelectableEnumItem{FirstName= x.Name, Selected = bool.Parse(x.selected) });

请注意,在上面的解决方案中,我使用了动态对象

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

我自己用的是第一个

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13565245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档