>백엔드 개발 >C++ >C#에서 중첩 컬렉션과 함께 JsonConvert.DeserializeObject를 사용할 때 JSON 역직렬화 오류를 해결하는 방법은 무엇입니까?

C#에서 중첩 컬렉션과 함께 JsonConvert.DeserializeObject를 사용할 때 JSON 역직렬화 오류를 해결하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-15 11:55:43717검색

How to Resolve JSON Deserialization Errors When Using JsonConvert.DeserializeObject with Nested Collections in C#?

JSON을 C# POCO 클래스로 역직렬화: 중첩 컬렉션 문제 해결

JsonConvert.DeserializeObject을 사용하여 JSON 데이터를 C# POCO(Plain Old CLR Objects)로 변환하는 것은 일반적으로 간단합니다. 그러나 중첩된 컬렉션을 처리할 때 문제가 발생할 수 있습니다.

문제:

중첩된 accountsbadges 컬렉션이 있는 사용자 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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