> 백엔드 개발 > C++ > System.Text.Json을 사용하여 필드를 직렬화 및 역직렬화하려면 어떻게 해야 합니까?

System.Text.Json을 사용하여 필드를 직렬화 및 역직렬화하려면 어떻게 해야 합니까?

Susan Sarandon
풀어 주다: 2025-01-14 07:22:45
원래의
840명이 탐색했습니다.

How Can I Serialize and Deserialize Fields Using System.Text.Json?

System.Text.Json: 직렬화 및 역직렬화 필드

최신 .NET 버전에서는 System.Text.Json.JsonSerializer이 선호되는 JSON 직렬화 및 역직렬화 방법입니다. 그러나 필드 변수가 포함된 클래스에는 기본적으로 지원되지 않으므로 문제가 됩니다.

문제

이전 버전의 .NET에서는 필드 변수가 직렬화/역직렬화 프로세스에 포함될 수 있습니다. JsonSerializer이 도입되면서 속성만 지원되므로 다음과 같은 문제가 발생합니다.

<code class="language-csharp">using System.Text.Json;

public class Car
{
    public int Year { get; set; } // 正确序列化
    public string Model; // 未正确序列化(字段变量)
}

static void Problem()
{
    Car car = new Car()
    {
        Model = "Fit",
        Year = 2008,
    };
    string json = JsonSerializer.Serialize(car); // {"Year":2008}
    Car carDeserialized = JsonSerializer.Deserialize<Car>(json);

    Console.WriteLine(carDeserialized.Model); // null!
}</code>
로그인 후 복사

솔루션

이 문제를 해결하기 위해 두 가지 전략이 있습니다.

1. .NET 5 이상

.NET 5부터 다음을 통해 공개 필드를 직렬화 및 역직렬화할 수 있습니다.

  • JsonSerializerOptions.IncludeFieldstrue
  • 으로 설정
  • 필드에 [JsonInclude] 속성 추가

예:

<code class="language-csharp">using System.Text.Json;
using System.Text.Json.Serialization;

static void Main()
{
    var car = new Car { Model = "Fit", Year = 2008 };

    // 启用支持
    var options = new JsonSerializerOptions { IncludeFields = true };

    // 传递“options”
    var json = JsonSerializer.Serialize(car, options);

    // 传递“options”
    var carDeserialized = JsonSerializer.Deserialize<Car>(json, options);

    Console.WriteLine(carDeserialized.Model); // 输出 "Fit"
}

public class Car
{
    public int Year { get; set; }
    [JsonInclude]
    public string Model;
}</code>
로그인 후 복사

2. .NET 코어 3.x

.NET Core 3.x에서는 필드 직렬화가 지원되지 않습니다. 이 문제를 해결하려면 사용자 지정 변환기를 사용하여 원하는 동작을 달성하는 것이 좋습니다.

자세한 내용과 자세한 문서는 다음 리소스를 참조하세요.

위 내용은 System.Text.Json을 사용하여 필드를 직렬화 및 역직렬화하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿