c# - JsonSerializer.Serialize 返回空对象

标签 c# json system.text.json

我正在尝试将我创建的类的对象保存到文件中,但 JsonSerializer.Serialize 返回 {}

class User : DalObject<User>
{
    private readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
    private string email;
    private string nickname;
    private string password;
    private bool LoggedIn;

    public User(string email, string password, string nickname, bool LoggedIn)
    {
        this.email = email;
        this.password = password;
        this.nickname = nickname;
        this.LoggedIn = LoggedIn;
    }

    public string ToJson()
    {
        var options = new JsonSerializerOptions
        {
            WriteIndented = true
        };
        log.Debug("User " + this.email + " saved");
        return JsonSerializer.Serialize(this, options);
    }

最佳答案

JsonSerializer.Serialize只序列化公共(public)属性。您只有(私有(private))字段。

Serialization behavior

  • By default, all public properties are serialized. You can specify properties to exclude.

  • ...

  • Currently, fields are excluded.

来自 Microsoft docs

可能自 .NET 5 以来

从 .NET 5 开始,可以包含字段。使用 JsonSerializerOptions.IncludeFields 全局设置或 [JsonInclude] 属性在序列化或反序列化时包含字段。

参见 https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-how-to?pivots=dotnet-5-0#include-fields

解决 .NET 5 之前的问题

你可以使用 Json.NET并将 [JsonProperty] 添加到私有(private)字段。

Json.NET中的方法是JsonConvert.SerializeObject

关于c# - JsonSerializer.Serialize 返回空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61292695/

相关文章:

iOS JSON 请求

c# - UnixEpochDateTimeConverter - 无法获取 token 类型 'Number' 的值作为字符串

c# - DateTime.ToString 格式化并将结果字符串反转回日期时间

c# - 如何将转换为 1bpp 的位图存储到 Compact Framework 上的单色 bmp 文件?

java - 颠簸条件规范

javascript - JSF + JSON : Output "plain" text in servlet?

c# - 使用 System.Text.Json 将 JSON 反序列化为包含动态属性的类

json - 使用 System.Text.Json 序列化实现接口(interface)的对象

c# - 访问 C 和 C# 中函数的返回值

c# - XPath 表达式求值错误