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