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
相关产品推荐
相关产品推荐

