c # 모델 클래스의 숫자로 json 속성?

Dec 06 2020

다음과 같이 json을 deserialize하는 Model 클래스를 어떻게 만들 수 있습니까?

{"query":{"apikey":"65320-2d8b-11eb-864","continent":"Africa"},"data":{"0":{"country_id":1,"name":"Africa","country_code":null,"continent":"Africa"},"9":{"country_id":10,"name":"Algeria","country_code":"dz","continent":"Africa"},"11":{"country_id":12,"name":"Angola","country_code":"ao","continent":"Africa"},"23":{"country_id":24,"name":"Botswana","country_code":"bw","continent":"Africa"},"27":{"country_id":28,"name":"Cameroon","country_code":"cm","continent":"Africa"},"32":{"country_id":33,"name":"Congo","country_code":"cg","continent":"Africa"},"39":{"country_id":40,"name":"Egypt","country_code":"eg","continent":"Africa"},"48":{"country_id":49,"name":"Ghana","country_code":"gh","continent":"Africa"},"62":{"country_id":63,"name":"Ivory Coast","country_code":"ci","continent":"Africa"},"67":{"country_id":68,"name":"Kenya","country_code":"ke","continent":"Africa"},"80":{"country_id":81,"name":"Morocco","country_code":"ma","continent":"Africa"},"85":{"country_id":86,"name":"Nigeria","country_code":"ng","continent":"Africa"},"102":{"country_id":103,"name":"Rwanda","country_code":"rw","continent":"Africa"},"106":{"country_id":107,"name":"Senegal","country_code":"sn","continent":"Africa"},"111":{"country_id":112,"name":"South Africa","country_code":"za","continent":"Africa"},"115":{"country_id":116,"name":"Tanzania","country_code":"tz","continent":"Africa"},"118":{"country_id":119,"name":"Tunisia","country_code":"tn","continent":"Africa"},"120":{"country_id":121,"name":"Uganda","country_code":"ug","continent":"Africa"},"129":{"country_id":130,"name":"Zambia","country_code":"zm","continent":"Africa"},"130":{"country_id":131,"name":"Zimbabwe","country_code":"zw","continent":"Africa"}}}

문제는 "0", "9", "11"등과 같은 숫자에 있습니다! 이 숫자를 모델 클래스의 하나의 속성으로 어떻게 변환 할 수 있습니까?

답변

2 pfx Dec 06 2020 at 21:37

모델에 data항목 을 구현하는 Dictionary경우이 숫자가이 Dictionary.

public class Model
{
    [JsonProperty("query")]
    public Query query {get; set; }

    [JsonProperty("data")]
    public Dictionary<string, Country> Data { get; set; }
}

public class Country
{
    [JsonProperty("country_id")]
    public int Id { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("country_code")]
    public string Code { get; set; }

    [JsonProperty("continent")]
    public string Continent { get; set; }
}

public class Query
{
    [JsonProperty("apikey")]
    public string ApiKey { get; set; }

    [JsonProperty("continent")]
    public string Continent { get; set; }
}
DerDingens Dec 06 2020 at 21:39

이 숫자를 사전의 키로 취급 할 수 있습니다. 따라서 다음과 같이 변환 할 수 있습니다.

using System;
using System.Collections.Generic;
using Newtonsoft.Json;
                    
public class Program
{
    public static void Main()
    {
        var testJson = "{\"data\":{\"11\": \"test11\"}}";
        var deserialized = (TestClass) JsonConvert.DeserializeObject(testJson, typeof(TestClass));
        Console.WriteLine(deserialized.Data[11]);
        
    }
}
public class TestClass
{
    public Dictionary<int, string> Data {get;set;}
}

( 이 dotnetfiddle 예제 를 테스트하려면 )

숫자가 두 번 이상 나타나지 않는 경우에만 가능합니다.