デフォルトのプライベートコンストラクタを持つクラスのJSONをC#オブジェクトにデシリアライズする 質問する

デフォルトのプライベートコンストラクタを持つクラスのJSONをC#オブジェクトにデシリアライズする 質問する

次のクラスのJSONをデシリアライズする必要があります。

public class Test
{
    public string Property { get; set; }

    private Test()
    {
        //NOTHING TO INITIALIZE
    }

    public Test(string prop)
    {
        Property = prop;
    }
}

次のようにTestのインスタンスを作成できます。

var instance = new Test("Instance");

私のJSONを次のように考えると

"{  "Property":"Instance" }"

デフォルトのコンストラクタがプライベートで、オブジェクトを取得している場合、Testクラスのオブジェクトを作成するにはどうすればよいでしょうか?プロパティがNULLです

私は Newtonsoft Json パーサーを使用しています。

ベストアンサー1

属性でマークすることで、Json.Net がプライベート コンストラクターを呼び出すようにすることができます[JsonConstructor]

[JsonConstructor]
private Test()
{
    //NOTHING TO INITIALIZE
}

シリアライザーは、コンストラクターを呼び出した後も、パブリック セッターを使用してオブジェクトを設定することに注意してください。


別の方法として、次のConstructorHandling設定を使用することもできます。

JsonSerializerSettings settings = new JsonSerializerSettings
{
    ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor
};

Test t = JsonConvert.DeserializeObject<Test>(json, settings);

おすすめ記事