JSON을 C# POCO 클래스로 역직렬화: 중첩 컬렉션 문제 해결
JsonConvert.DeserializeObject
을 사용하여 JSON 데이터를 C# POCO(Plain Old CLR Objects)로 변환하는 것은 일반적으로 간단합니다. 그러나 중첩된 컬렉션을 처리할 때 문제가 발생할 수 있습니다.
문제:
중첩된 accounts
및 badges
컬렉션이 있는 사용자 POCO를 생각해 보세요. 역직렬화를 시도하면 accounts
속성(List<T>
과 같은 컬렉션으로 예상됨)이 JSON 개체로 처리됨을 나타내는 예외가 발생할 수 있습니다.
해결책:
이 솔루션에는 두 가지 주요 측면이 포함됩니다.
1. accounts
속성을 올바르게 정의:
C# POCO 클래스는 accounts
속성을 JSON 구조를 미러링하는 객체로 선언해야 합니다. 이는 일반적으로 계정 데이터를 나타내기 위해 별도의 Account
클래스를 생성하는 것을 의미합니다.
2. JsonProperty
속성 활용:
JsonProperty
속성은 JSON 속성 이름을 해당 C# 속성에 매핑하는 데 중요합니다. 이렇게 하면 정확한 역직렬화가 보장됩니다.
예시:
이 예에서는 중첩된 컬렉션을 처리하여 POCO 클래스로 JSON 역직렬화를 성공적으로 수행하는 방법을 보여줍니다.
<code class="language-csharp">using Newtonsoft.Json; using System.Net; public class Example { public static void Main(string[] args) { using (WebClient wc = new WebClient()) { string json = wc.DownloadString("http://coderwall.com/mdeiters.json"); // Replace with your JSON source User user = JsonConvert.DeserializeObject<User>(json); // Access user properties here... } } } 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("endorsements")] public int Endorsements { get; set; } [JsonProperty("team")] public string Team { get; set; } [JsonProperty("accounts")] public Account Accounts { get; set; } [JsonProperty("badges")] public List<Badge> Badges { get; set; } } public class Account { [JsonProperty("github")] // Assuming 'github' is a property in the JSON public string Github { get; set; } } public class Badge { [JsonProperty("name")] public string Name { get; set; } [JsonProperty("description")] public string Description { get; set; } [JsonProperty("created")] public string Created { get; set; } [JsonProperty("badge")] public string BadgeUrl { get; set; } }</code>
이러한 지침을 따르면 JSON 구조가 단순한 목록 표현과 약간 다른 경우에도 중첩된 컬렉션이 있는 JSON 데이터를 C# POCO 클래스로 효과적으로 역직렬화할 수 있습니다. "http://coderwall.com/mdeiters.json"
을 실제 JSON 데이터 소스로 바꾸는 것을 잊지 마세요. 또한 중첩 클래스 내에 Newtonsoft.Json
using 문과 명시적 속성 선언이 추가된 점에 유의하세요.
위 내용은 C#에서 중첩 컬렉션과 함께 JsonConvert.DeserializeObject를 사용할 때 JSON 역직렬화 오류를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!