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

Isi*_*tar 4 .net c# json.net c#-9.0

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

MWE:

using System;
using Newtonsoft.Json;

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

record Something([JsonProperty("hello")] string world) {}
Run Code Online (Sandbox Code Playgroud)

输出:

{"world":"something"}
Run Code Online (Sandbox Code Playgroud)

预期输出:

{"hello":"something"}
Run Code Online (Sandbox Code Playgroud)

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

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

    [JsonProperty("hello")] public string World { get; }
}
Run Code Online (Sandbox Code Playgroud)

Jer*_*ert 17

根据文档

通过使用语法上应用于相应记录参数的属性property:field:目标,可以将属性应用于合成的自动属性及其支持字段。

所以你要

record Something([property:JsonProperty("hello")] string world) {}
Run Code Online (Sandbox Code Playgroud)

如果没有property:限定符,属性最终会出现在生成的构造函数的参数上(这在其他场景中很有用,比如可空性)。