유형의 다음 변수가 {Newtonsoft.Json.Linq.JArray}
있습니다.
properties["Value"] {[
{
"Name": "Username",
"Selected": true
},
{
"Name": "Password",
"Selected": true
}
]}
내가 달성하고자하는 것은 이것을 다음 유형의 List<SelectableEnumItem>
위치 로 변환 하는 것 SelectableEnumItem
입니다.
public class SelectableEnumItem
{
public string Name { get; set; }
public bool Selected { get; set; }
}
나는 프로그래밍에 익숙하지 않으며 이것이 가능한지 확실하지 않습니다. 실제 사례에 대한 도움을 주시면 대단히 감사하겠습니다.
답변
그냥 array.ToObject<List<SelectableEnumItem>>()
메소드를 호출하십시오 . 필요한 것을 반환합니다.
설명서 : JSON을 형식으로 변환
답변
문제의 예는 속성 이름이 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();
답변
내 경우의 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
}
items 배열을 클라이언트 목록으로 변환하는 작업은 다음과 같이 처리되었습니다.
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);
}
답변
같은 방법으로 다른 방법을 생각할 수 있습니다
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) });
동적 객체를 사용한 위의 솔루션에주의하십시오.
위의 솔루션을 조합 한 더 많은 솔루션을 생각할 수 있습니다. 그러나 나는 거의 모든 가능한 방법을 다룬다 고 생각합니다.
내 자신은 첫 번째를 사용합니다
답변
using Newtonsoft.Json.Linq;
using System.Linq;
using System.IO;
using System.Collections.Generic;
public List<string> GetJsonValues(string filePath, string propertyName)
{
List<string> values = new List<string>();
string read = string.Empty;
using (StreamReader r = new StreamReader(filePath))
{
var json = r.ReadToEnd();
var jObj = JObject.Parse(json);
foreach (var j in jObj.Properties())
{
if (j.Name.Equals(propertyName))
{
var value = jObj[j.Name] as JArray;
return values = value.ToObject<List<string>>();
}
}
return values;
}
}
답변
IList를 사용하여 JArray 수를 얻고 루프를 사용하여 목록으로 변환
var array = result["items"].Value<JArray>();
IList collection = (IList)array;
var list = new List<string>();
for (int i = 0; i < collection.Count; j++)
{
list.Add(collection[i].ToString());
}