构造函数中 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:
限定符,该属性将在生成的构造函数的参数上结束(这在其他情况下很有用,例如可空性)。
使用 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:
orfield:
targets for attributes syntactically applied to the corresponding record parameter.
所以你想要
record Something([property:JsonProperty("hello")] string world) {}
如果没有 property:
限定符,该属性将在生成的构造函数的参数上结束(这在其他情况下很有用,例如可空性)。