💭
C# のプライマリー コンストラクターに属性を設定したい
プライマリー コンストラクターを持ってるクラスに追加でコンストラクターを追加したら System.Text.Json が、そのクラスのデシリアライズ出来ないという例外を出すようになりました。
エラーメッセージは以下のような感じです。
Error:System.NotSupportedException: Deserialization of types without a parameterless constructor, a singular parameterized constructor, or a parameterized constructor annotated with 'JsonConstructorAttribute' is not supported. Type 'クラス名'.
これは、まぁせやなって感じなんですが、じゃぁプライマリーコンストラクターに JsonConstructorAttribute
を付ければいいじゃんと思ったら付け方がわからなかったのでメモです。
ドキュメント的には以下のドキュメントの Attributes targeting primary constructors の所に書いてあります。
指定方法
クラス定義(またはレコードの定義)の所に [method: 属性名]
という形で指定します。
[method: JsonConstructor]
public record Hoge(string Foo, string Bar)
{
public Hoge(string Foo) : this(Foo, "Bar")
{
}
}
これで無事 System.Text.Json も例外を吐かなくなりました。
Discussion