>백엔드 개발 >C++ >특성을 사용하여 하위 JSON 속성을 클래스 속성에 매핑할 수 있나요?

특성을 사용하여 하위 JSON 속성을 클래스 속성에 매핑할 수 있나요?

Patricia Arquette
Patricia Arquette원래의
2025-01-24 23:02:14333검색

Can I Map Child JSON Properties to Class Properties Using Attributes?

속성을 사용하여 JSON의 하위 속성에 액세스하시겠습니까?

Newtonsoft.Json의 DeserializeObject<T>을 사용한 JSON 역직렬화를 사용하면 [DataMember(Name = "raw_property_name")]을 사용하여 원시 JSON 데이터를 클래스 속성에 매핑할 수 있습니다. 하지만 복잡한 JSON 개체의 하위 속성을 클래스의 간단한 속성에 매핑하려면 어떻게 해야 할까요?

예를 들어 다음 JSON을 고려해 보세요.

<code class="language-json">{
    "picture": 
    {
        "id": 123456,
        "data": 
        {
            "type": "jpg",
            "url": "http://www.someplace.com/mypicture.jpg"
        }
    }
}</code>

아마도 picture 객체의 url 속성에만 관심이 있을 것이므로 클래스에서 복잡한 객체를 생성하고 싶지 않을 것입니다. 이렇게 간단하게 매핑할 수 있나요?

<code class="language-csharp">[DataMember(Name = "picture.data.url")]
public string ProfilePicture { get; set; }</code>

직접 경로 매핑에 JObject 사용

간단한 방법은 JSON을 JObject으로 구문 분석하는 것입니다. 그런 다음 ToObject() 을 사용하여 JObject 에서 클래스를 채웁니다. 추가 속성을 추출하려면 SelectToken():

을 사용하세요.
<code class="language-csharp">string json = @"
{
    ""name"" : ""Joe Shmoe"",
    ""age"" : 26,
    ""picture"":
    {
        ""id"": 123456,
        ""data"":
        {
            ""type"": ""jpg"",
            ""url"": ""http://www.someplace.com/mypicture.jpg""
        }
    }
}";

JObject jo = JObject.Parse(json);
Person p = jo.ToObject<Person>();
p.ProfilePicture = (string)jo.SelectToken("picture.data.url");</code>

속성 기반 매핑을 위한 사용자 정의 JsonConverter

또는 사용자 정의 JsonConverter를 생성하여 JsonProperty 속성을 ​​활성화하여 필요에 따라 하위 속성을 매핑할 수도 있습니다.

<code class="language-csharp">class JsonPathConverter : JsonConverter
{
    // ... 实现代码在问题答案中提供 ...
}</code>

사용방법:

<code class="language-csharp">[JsonConverter(typeof(JsonPathConverter))]
class Person
{
    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("picture.data.url")]
    public string ProfilePicture { get; set; }

    // ... 其他属性 ...
}

Person p = JsonConvert.DeserializeObject<Person>(json);</code>

이를 통해 하위 속성에 대한 속성 기반 매핑을 사용하여 JSON 데이터를 클래스 객체로 역직렬화할 때 더 큰 유연성을 제공할 수 있습니다.

위 내용은 특성을 사용하여 하위 JSON 속성을 클래스 속성에 매핑할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.