You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#9中Record使用JsonPropertyNameAttribute报错?求解决办法

解决C# Record中使用JsonPropertyName特性的CS0592错误

你遇到的这个错误是因为JsonPropertyName特性的目标类型限制——它只能应用在属性、索引器或字段上,而你直接把它加在了record的主构造函数参数上,默认情况下这个特性会绑定到参数本身,而不是编译器自动生成的对应属性,所以触发了CS0592错误。

别担心,有两种简单的解决方法:

方法1:直接在record的属性上声明特性

放弃主构造函数的简洁写法,显式定义属性并添加特性,这样更直观:

public record QuoteResponse
{
    [JsonPropertyName("quotes")]
    public IReadOnlyCollection<Quote>? Quotes { get; init; }
}

方法2:使用特性目标指定符property:

如果你想保留主构造函数的简洁写法,可以通过property:前缀告诉编译器,把特性应用到自动生成的属性上,而不是构造函数参数:

public record QuoteResponse([property: JsonPropertyName("quotes")] IReadOnlyCollection<Quote>? Quotes);

这个property:是C#的特性目标指定符,它能明确指定特性应该应用到哪个元素上——在这里就是让JsonPropertyName绑定到record生成的Quotes属性,而不是构造函数的参数,完美绕过了特性的类型限制。

内容的提问来源于stack exchange,提问作者Dmitry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:31:38