>백엔드 개발 >C++ >JSON을 C# POCO 클래스로 역직렬화할 때 JsonConvert.DeserializeObject 오류를 해결하는 방법은 무엇입니까?

JSON을 C# POCO 클래스로 역직렬화할 때 JsonConvert.DeserializeObject 오류를 해결하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-15 11:04:44859검색

How to Resolve JsonConvert.DeserializeObject Errors When Deserializing JSON into C# POCO Classes?

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

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