首页 > 后端开发 > C++ > 如何使用 System.Text.Json 序列化和反序列化字段?

如何使用 System.Text.Json 序列化和反序列化字段?

Susan Sarandon
发布: 2025-01-14 07:22:45
原创
889 人浏览过

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.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 Core 3.x

在.NET Core 3.x中,不支持字段序列化。作为一种变通方法,可以考虑使用自定义转换器来实现所需的行为。

更多信息和详细文档,请参考以下资源:

以上是如何使用 System.Text.Json 序列化和反序列化字段?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板