programing

현재 JSON 어레이(예: [1, 2, 3])를 유형으로 역직렬화할 수 없습니다.

skycolor 2023. 3. 28. 21:29
반응형

현재 JSON 어레이(예: [1, 2, 3])를 유형으로 역직렬화할 수 없습니다.

저는 다음과 같은 수업을 듣습니다.

public class MyStok
{
    public int STId { get; set; }
    public int SM { get; set; }
    public string CA { get; set; }
    public string Br { get; set; }
    public string BNo { get; set; }
    public decimal Vat { get; set; }
    public decimal Price { get; set; }
}

나는 다음과 같이 역직렬화한다.

string sc = e.ExtraParams["sc"].ToString();
MyStok myobj = JSON.Deserialize<MyStok>(sc);

출력은 다음과 같습니다(string sc)의 피들러:

[
    {
        "STId": 2,
        "CA": "hbh",
        "Br": "jhnj",
        "SM": 20,
        "Vat": 10,
        "Price": 566,
        "BNo": "1545545"
    }
]

하지만 다음과 같은 오류가 발생합니다.

현재 JSON 배열(예: [1, 2, 3])을 유형 [...]으로 역직렬화할 수 없습니다.

그 코드에 뭐가 잘못됐나요?

문자열에 1개의 어레이가 포함되어 있는 것 같습니다.MyStok그 안에 목적물이 있다.입력의 양 끝에서 대괄호를 제거하면 데이터를 단일 개체로 역직렬화할 수 있습니다.

MyStok myobj = JSON.Deserialize<MyStok>(sc.Substring(1, sc.Length-2));

어레이를 디시리얼라이즈하여MyStok오브젝트를 인덱스 0으로 가져옵니다.

var myobjList = JSON.Deserialize<List<MyStok>>(sc);
var myObj = myobjList[0];

어레이 타입의 경우는, 이것을 사용해 주세요.

 List<MyStok> myDeserializedObjList = (List<MyStok>)Newtonsoft.Json.JsonConvert.DeserializeObject(sc, typeof(List<MyStok>));

Json의 직렬화를 해제하는 방법에 대한 자세한 내용은 여기를 참조하십시오.

똑같은 에러 메세지가 표시되었습니다.Aditi의 예를 들어보니 진짜 문제가 뭔지 알 수 있었습니다.(다른 apiEndpoint가 비슷한 콜을 하고 있었기 때문에 정상적으로 동작했습니다.)이 경우 목록에 있는 개체는 아직 추출된 인터페이스를 가지고 있지 않습니다.제가 한 발짝을 놓쳤기 때문에, 그 발은 그 발뒤꿈치를 묶기 위해

List<OfthisModelType>

역직렬화에 실패했습니다.

이 문제가 발생했을 경우는, 그것이 문제의 원인인지 아닌지를 확인해 주세요.

이름이 없는 루트 레벨 어레이가 있고 실제로 메서드 추가와 같은 용도로 사용하려는 경우 다른 대안으로 사용할 수 있습니다.

public class MyStoks : List<MyStok> 
{

}

그러면 이렇게 역직렬화할 수 있습니다.

MyStoks myObj = JsonConvert.DeserializeObject<MyStoks>(jsonString);
HttpClient webClient = new HttpClient();
Uri uri = new Uri("your url");
HttpResponseMessage response = await webClient.GetAsync(uri)
var jsonString = await response.Content.ReadAsStringAsync();
var objData = JsonConvert.DeserializeObject<List<CategoryModel>>(jsonString);

언급URL : https://stackoverflow.com/questions/17762032/cannot-deserialize-the-current-json-array-e-g-1-2-3-into-type

반응형