codememo

NewtonSoft JsonConvert에서 이름에 대시("-")가 있는 속성을 역직렬화하려면 어떻게 해야 합니까?

tipmemo 2023. 3. 9. 22:06
반응형

NewtonSoft JsonConvert에서 이름에 대시("-")가 있는 속성을 역직렬화하려면 어떻게 해야 합니까?

이름에 대시가 있는 JSON 개체가 있습니다.아래 예

{
    "veg": [
        {
            "id": "3",
            "name": "Vegetables",
            "count": "25"
        },
        {
            "id": "4",
            "name": "Dal",
            "count": "2"
        },
        {
            "id": "5",
            "name": "Rice",
            "count": "8"
        },
        {
            "id": "7",
            "name": "Breads",
            "count": "6"
        },
        {
            "id": "9",
            "name": "Meals",
            "count": "3"
        },
        {
            "id": "46",
            "name": "Extras",
            "count": "10"
        }
    ],
    "non-veg": [
        {
            "id": "25",
            "name": "Starters",
            "count": "9"
        },
        {
            "id": "30",
            "name": "Gravies",
            "count": "13"
        },
        {
            "id": "50",
            "name": "Rice",
            "count": "4"
        }
    ]
}

이 json을 어떻게 역직렬화합니까?

NewtonSoft를 사용하여 이 작업을 수행하는 방법에 대한 질문에 답하려면 JsonProperty 속성 플래그를 사용합니다.

[JsonProperty(PropertyName="non-veg")]
public string nonVeg { get; set; }

DataContractJsonSerializer를 사용하면 이 작업을 수행할 수 있습니다.

[DataContract]
public class Item
{
    [DataMember(Name = "id")]
    public int Id { get; set; }
    [DataMember(Name = "name")]
    public string Name { get; set; }
    [DataMember(Name = "count")]
    public int Count { get; set; }
}

[DataContract]
public class ItemCollection
{
    [DataMember(Name = "veg")]
    public IEnumerable<Item> Vegetables { get; set; }
    [DataMember(Name = "non-veg")]
    public IEnumerable<Item> NonVegetables { get; set; }
}

다음과 같은 방법으로 역직렬화할 수 있습니다.

string data;

// fill the json in data variable

ItemCollection collection;
using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(data)))
{
    DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(ItemCollection));
    collection = (ItemCollection)serializer.ReadObject(ms);
}

사용할 수 있습니다.JObject.Parse(뉴턴소프트의 경우) 특수 문자가 있더라도 속성을 잡을 수 있습니다.

JObject result = JObject.Parse(json);
Console.WriteLine(result["non-veg"][0]["name"].ToString());

언급URL : https://stackoverflow.com/questions/14753113/how-to-deserialize-a-property-with-a-dash-in-its-name-with-newtonsoft-jso

반응형