JsonConvert.DeserializeObject: JSON을 C# POCO 클래스로 역직렬화
RESTful API를 처리할 때 JSON 응답을 C# POCO(Plain Old CLR Objects)로 역직렬화해야 하는 경우가 많습니다. 일반적으로 사용되는 메서드는 JsonConvert.DeserializeObject입니다.
질문:
다음 사용자 POCO 클래스를 고려하세요.
User.cs:
<code class="language-c#">public class User { public string Username { get; set; } public string Name { get; set; } public string Location { get; set; } // ... [JsonProperty("accounts")] public List<Account> Accounts { get; set; } }</code>
JsonConvert.DeserializeObject를 사용하여 JSON을 이 클래스로 역직렬화하려고 하면 JSON 배열을 계정 목록으로 역직렬화할 수 없음을 나타내는 예외가 발생합니다.
해결책:
이 문제를 해결하려면 다음 두 가지 핵심 사항을 고려해야 합니다.
1. Accounts 속성을 객체로 선언합니다.
목록 대신 개체를 나타내도록 Accounts 속성 선언을 변경합니다.
User.cs(업데이트됨):
<code class="language-c#">public class User { // ... [JsonProperty("accounts")] public Account Accounts { get; set; } }</code>
2. JsonProperty 속성 사용:
JsonProperty 특성을 각 속성에 적용하여 JSON 속성 이름을 C# 속성 이름에 매핑합니다.
User.cs(JsonProperty 사용):
<code class="language-c#">public class User { [JsonProperty("username")] public string Username { get; set; } [JsonProperty("name")] public string Name { get; set; } [JsonProperty("location")] public string Location { get; set; } // ... [JsonProperty("accounts")] public Account Accounts { get; set; } }</code>
추가 클래스(계정 및 배지):
계정 및 배지와 같은 중첩 개체에 대한 추가 클래스를 정의하고 그에 따라 JsonProperty 속성을 적용합니다.
Account.cs:
<code class="language-c#">public class Account { [JsonProperty("github")] public string Github { get; set; } }</code>
Badge.cs:
<code class="language-c#">public class Badge { [JsonProperty("name")] public string Name { get; set; } [JsonProperty("description")] public string Description { get; set; } // ... }</code>
사용 예:
<code class="language-c#">using Newtonsoft.Json; using System.Net; class Program { static User LoadUserFromJson(string response) { var user = JsonConvert.DeserializeObject<User>(response); return user; } static void Main() { using (WebClient wc = new WebClient()) { var json = wc.DownloadString("http://coderwall.com/mdeiters.json"); var user = LoadUserFromJson(json); } } }</code>
이러한 변경으로 이제 JsonConvert.DeserializeObject는 JSON을 사용자 POCO 클래스로 역직렬화하고 중첩된 개체(계정)를 적절하게 처리합니다.
위 내용은 JSON을 C# POCO 클래스로 역직렬화할 때 JsonConvert.DeserializeObject 오류를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!