>source

다음 JSON이 지정된 JSON (프로젝트의 루트에서 database.json이라는 파일) :

{
  "customers": [{
      "id": 1,
      "name": "Bob"
    },
    {
      "id": 2,
      "name": "Mary"
    },
    {
      "id": 3,
      "name": "Joe"
    }
  ]
}

및 다음 고객 클래스

public class Customer
    {
        [JsonProperty("id")]
        [JsonPropertyName("id")]
        public int Id { get; set; }
        [JsonProperty("name")]
        [JsonPropertyName("name")]
        public string Name { get; set; }
    }

deserializing하는 동안 오류가 발생합니다.

    private List<Customer> GetCustomersFromFile()
        {
            string jsonString= File.ReadAllText(@"database.json", Encoding.UTF8);
            return GetJsonGenericType<List<Customer>>(jsonString);
        }
        private static T GetJsonGenericType<T>(string json)
        {
            var generatedType= System.Text.Json.JsonSerializer.Deserialize<T>(json);
            return (T)Convert.ChangeType(generatedType, typeof(T));
        }

오류 세부 정보 :

System.Text.Json.JsonException
  HResult=0x80131500
  Message=The JSON value could not be converted to System.Collections.Generic.List`1[GroceryStoreAPI.Models.Customer]. Path: $ | LineNumber: 0 | BytePositionInLine: 1.
  Source=System.Text.Json
  StackTrace:
   at System.Text.Json.ThrowHelper.ThrowJsonException_DeserializeUnableToConvertValue(Type propertyType)
   at System.Text.Json.JsonSerializer.HandleStartObject(JsonSerializerOptions options, ReadStack&amp;
 state)
   at System.Text.Json.JsonSerializer.ReadCore(JsonSerializerOptions options, Utf8JsonReader&amp;
 reader, ReadStack&amp;
 readStack)
   at System.Text.Json.JsonSerializer.ReadCore(Type returnType, JsonSerializerOptions options, Utf8JsonReader&amp;
 reader)
   at System.Text.Json.JsonSerializer.Deserialize(String json, Type returnType, JsonSerializerOptions options)
   at System.Text.Json.JsonSerializer.Deserialize[TValue](String json, JsonSerializerOptions options)
   at GroceryStoreAPI.Data.CustomerRepo.GetJsonGenericType[T](String json) in C:\Users\iamau\source\repos\interview-dotnet3\GroceryStoreAPI\Data\CustomerRepo.cs:line 40
   at GroceryStoreAPI.Data.CustomerRepo.GetCustomersFromFile() in C:\Users\iamau\source\repos\interview-dotnet3\GroceryStoreAPI\Data\CustomerRepo.cs:line 33
   at GroceryStoreAPI.Data.CustomerRepo..ctor() in C:\Users\iamau\source\repos\interview-dotnet3\GroceryStoreAPI\Data\CustomerRepo.cs:line 18
  This exception was originally thrown at this call stack:
    [External Code]
    GroceryStoreAPI.Data.CustomerRepo.GetJsonGenericType<T>(string) in CustomerRepo.cs
    GroceryStoreAPI.Data.CustomerRepo.GetCustomersFromFile() in CustomerRepo.cs
    GroceryStoreAPI.Data.CustomerRepo.CustomerRepo() in CustomerRepo.cs

json.net을 시도했고 비슷한 오류가 발생했습니다.

나는 또한 제안 된 것처럼 이런 일을하는 오류를 얻는다. 여기:

string json_object= JsonConvert.DeserializeObject<string>(jsonString);
return JsonConvert.DeserializeObject<List<Customer>>(json_object);
Newtonsoft.Json.JsonReaderException: 'Unexpected character encountered while parsing value: {. Path '', line 1, position 1.'

JSON은 고객 목록이 아닙니다. 여기에는 항목 목록이 포함 된 속성 고객이 포함되어 있습니다. 속성 및 유형이 고객 목록이므로 고객이있는 rootObject를 만들어야합니다. 그런 다음 해당 rootObject로 deserialize합니다.

Jawad2021-07-23 18:32:08

@jawad 감사합니다. 나는 꽤 따르지 않는다. 그 루트 객체가 어떻게 생겼는지 명확히 할 수 있습니까?

Aaron2021-07-23 18:32:08
  • 이전 python : URL 잘못 뷰로드 -Django.
  • 다음 sql : 테이블을 만들지 않고 Temp 테이블에 동적 쿼리의 결과를 저장하는 방법은 무엇입니까?