속성을 사용하여 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!