gpt4 book ai didi

c# - 如何将类字段与 System.Text.Json.JsonSerializer 一起使用?

转载 作者:太空狗 更新时间:2023-10-30 01:12:35 24 4
gpt4 key购买 nike

我最近将一个解决方案升级为所有 .NET Core 3,并且我有一个类要求类变量为字段。这是一个问题,因为新的 System.Text.Json.JsonSerializer 不支持序列化或反序列化字段,而是只处理属性。

有什么方法可以确保下面示例中的两个最终类具有完全相同的值吗?

using System.Text.Json;

public class Car
{
public int Year { get; set; } // does serialize correctly
public string Model; // doesn't serialize correctly
}

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!
}

最佳答案

.NET Core 3.x 中,System.Text.Json 不序列化字段。来自docs :

Fields are not supported in System.Text.Json in .NET Core 3.1. Custom converters can provide this functionality.

.NET 5 及更高版本中,可以通过设置 JsonSerializerOptions.IncludeFields 来序列化公共(public)字段。为 true 或通过标记要序列化的字段 [JsonInclude] :

using System.Text.Json;

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

// Enable support
var options = new JsonSerializerOptions { IncludeFields = true };

// Pass "options"
var json = JsonSerializer.Serialize(car, options);

// Pass "options"
var carDeserialized = JsonSerializer.Deserialize<Car>(json, options);

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

public class Car
{
public int Year { get; set; }
public string Model;
}

详情见:

关于c# - 如何将类字段与 System.Text.Json.JsonSerializer 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58139759/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com