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

Mdb*_*Mdb 216 c# json.net

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

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

]}
Run Code Online (Sandbox Code Playgroud)

我想做到的是将其转换为List<SelectableEnumItem>那里SelectableEnumItem是以下类型:

public class SelectableEnumItem
    {
        public string Name { get; set; }
        public bool Selected { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

我对编程很新,我不确定这是否可行.任何有关工作示例的帮助将不胜感激.

Hob*_*low 440

只需调用array.ToObject<List<SelectableEnumItem>>()方法.它会返回你需要的东西.

文档:将JSON转换为类型

  • 确保您的类定义包含无参数构造函数. (4认同)
  • 我正在尝试以这种方式进行转换,但是向我发送的消息是“对象不包含“ToObject”的定义,并且无法找到接受类型“object”的第一个参数的可访问扩展方法“ToObject”(是您缺少 using 指令或程序集引用吗?)”我的变量使用类型“object”声明,该类型返回类型“JArray”(Newtonsoft.Json.Linq.JArray)。谁能帮我? (2认同)

Sou*_*asu 40

问题中的示例是一个更简单的情况,其中属性名称在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();
Run Code Online (Sandbox Code Playgroud)


ste*_*ndo 5

在我的情况下,API返回值如下所示:

{
  "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
}
Run Code Online (Sandbox Code Playgroud)

将项目数组转换为客户列表的方法如下所示:

 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);
        }
Run Code Online (Sandbox Code Playgroud)