유형을 사용하려면 JSON 개체(예: {"name" ""value"")가 필요하므로 JSON 어레이(예: [1,2,3])를 유형 '으로 역직렬화할 수 없습니다.
다음 JSON이 있습니다.
[
{
"Attributes": [
{
"Key": "Name",
"Value": {
"Value": "Acc 1",
"Values": [
"Acc 1"
]
}
},
{
"Key": "Id",
"Value": {
"Value": "1",
"Values": [
"1"
]
}
}
],
"Name": "account",
"Id": "1"
},
{
"Attributes": [
{
"Key": "Name",
"Value": {
"Value": "Acc 2",
"Values": [
"Acc 2"
]
}
},
{
"Key": "Id",
"Value": {
"Value": "2",
"Values": [
"2"
]
}
}
],
"Name": "account",
"Id": "2"
},
{
"Attributes": [
{
"Key": "Name",
"Value": {
"Value": "Acc 3",
"Values": [
"Acc 3"
]
}
},
{
"Key": "Id",
"Value": {
"Value": "3",
"Values": [
"3"
]
}
}
],
"Name": "account",
"Id": "2"
}
]
그리고 나는 다음과 같은 수업이 있다.
public class RetrieveMultipleResponse
{
public List<Attribute> Attributes { get; set; }
public string Name { get; set; }
public string Id { get; set; }
}
public class Value
{
[JsonProperty("Value")]
public string value { get; set; }
public List<string> Values { get; set; }
}
public class Attribute
{
public string Key { get; set; }
public Value Value { get; set; }
}
아래 코드를 사용하여 위의 JSON을 역직렬화하려고 합니다.
var objResponse1 = JsonConvert.DeserializeObject<RetrieveMultipleResponse>(JsonStr);
이 에러가 표시됩니다.
현재 JSON 배열(예: [1,2,3])을 'test' 유형으로 역직렬화할 수 없습니다.Model.RetrieveMultipleResponse'는 JSON 오브젝트(예: {"name":"value"})가 필요하므로 올바르게 역직렬화됩니다.이 오류를 해결하려면 JSON을 JSON 개체(예: {"name":value")로 변경하거나, 역직렬화된 유형을 JSON 어레이에서 역직렬화할 수 있는 수집 인터페이스(예: ICollection, IList)를 구현하는 유형으로 변경하십시오.JsonArrayAttribute를 유형에 추가하여 JSON 어레이에서 강제로 역직렬화할 수도 있습니다.패스 ', 라인 1, 위치 1
json 문자열은 대괄호( )로 둘러싸여 있습니다.[]
)따라서 싱글이 아닌 어레이로 해석됩니다.RetrieveMultipleResponse
물건.따라서 deserialize를 실행하여 collection을 타입으로 해야 합니다.RetrieveMultipleResponse
예를 들어 다음과 같습니다.
var objResponse1 =
JsonConvert.DeserializeObject<List<RetrieveMultipleResponse>>(JsonStr);
Generics(확장 방식)를 지원하려면 다음과 같은 패턴이 필요합니다.
public static List<T> Deserialize<T>(this string SerializedJSONString)
{
var stuff = JsonConvert.DeserializeObject<List<T>>(SerializedJSONString);
return stuff;
}
다음과 같이 사용됩니다.
var rc = new MyHttpClient(URL);
//This response is the JSON Array (see posts above)
var response = rc.SendRequest();
var data = response.Deserialize<MyClassType>();
MyClassType은 다음과 같습니다(JSON 어레이의 이름 값 쌍과 일치해야 함).
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
public class MyClassType
{
[JsonProperty(PropertyName = "Id")]
public string Id { get; set; }
[JsonProperty(PropertyName = "Name")]
public string Name { get; set; }
[JsonProperty(PropertyName = "Description")]
public string Description { get; set; }
[JsonProperty(PropertyName = "Manager")]
public string Manager { get; set; }
[JsonProperty(PropertyName = "LastUpdate")]
public DateTime LastUpdate { get; set; }
}
NUGET을 사용하여 Newtonsoft를 다운로드합니다.Json은 필요한 경우 참조를 추가합니다.
using Newtonsoft.Json;
솔루션에 코멘트를 추가할 수 없지만 나에게는 효과가 없었다.나에게 효과가 있었던 솔루션은 다음과 같습니다.
var des = (MyClass)Newtonsoft.Json.JsonConvert.DeserializeObject(response, typeof(MyClass)); return des.data.Count.ToString();
JSON 배열을 strong type으로 역직렬화하고 있습니다.NET 객체
이걸 쓰세요.FrontData
JSON 문자열:
var objResponse1 = JsonConvert.DeserializeObject<List<DataTransfer>>(FrontData);
및 추출 목록:
var a = objResponse1[0];
var b = a.CustomerData;
첫 번째 요소(Key)를 추출하려면 다음 방법을 사용해 보십시오.다른 요소(Key)도 마찬가지입니다.
using (var httpClient = new HttpClient())
{
using (var response = await httpClient.GetAsync("Your URL"))
{
var apiResponse = await response.Content.ReadAsStringAsync();
var list = JObject.Parse(apiResponse)["Attributes"].Select(el => new { Key= (string)el["Key"] }).ToList();
var Keys= list.Select(p => p.Key).ToList();
}
}
var objResponse1 =
JsonConvert.DeserializeObject<List<RetrieveMultipleResponse>>(JsonStr);
동작했다!
언급URL : https://stackoverflow.com/questions/22557559/cannot-deserialize-the-json-array-e-g-1-2-3-into-type-because-type-requ
'programing' 카테고리의 다른 글
이벤트 핸들러를 사용하는 정적 HTML 요소를 수정하려면 역할이 필요합니다. (0) | 2023.03.22 |
---|---|
함수의 워드프레스 var_dump.php (0) | 2023.03.22 |
사용자가 입력을 일시 중지할 때까지 지연되는 키 켜기 이벤트를 트리거하려면 어떻게 해야 합니까? (0) | 2023.03.22 |
Angular 2: HTTP 응답 본문에 액세스하는 방법 (0) | 2023.03.22 |
웹 팩 번들의 크기를 최소화하는 방법 (0) | 2023.03.22 |