构造函数中 C# 记录上的 JsonProperty

JsonProperty on C# Records in Constructor

使用 C# 9 中的新 C# 记录类型,我想知道是否可以(用于序列化)在构造函数参数上从 Newtonsoft.Json 设置 JsonPropertyAttribute。 它似乎不是开箱即用的。

MWE:

using System;
using Newtonsoft.Json;

Console.WriteLine(JsonConvert.SerializeObject(new Something("something")));

record Something([JsonProperty("hello")] string world) {}

输出:

{"world":"something"}

预期输出:

{"hello":"something"}

有没有简单的方法让它像这样工作?还是我们必须使用真正的构造函数恢复到 属性 样式?

internal record Something
{
    public Something(string world) { World = world; }

    [JsonProperty("hello")] public string World { get; }
}

根据 docs:

Attributes can be applied to the synthesized auto-property and its backing field by using property: or field: targets for attributes syntactically applied to the corresponding record parameter.

所以你想要

record Something([property:JsonProperty("hello")] string world) {}

如果没有 property: 限定符,该属性将在生成的构造函数的参数上结束(这在其他情况下很有用,例如可空性)。