デフォルトのコンストラクターと、一連のパラメーターを受け取るオーバーロードされたコンストラクターを持つクラスがあります。これらのパラメータはオブジェクトのフィールドに一致し、構築時に割り当てられます。この時点で、他の目的のためにデフォルトのコンストラクターが必要なので、可能であればそれを保持します。
私の問題:デフォルトのコンストラクターを削除してJSON文字列を渡すと、オブジェクトは正しくデシリアライズされ、問題なくコンストラクターのパラメーターを渡します。期待どおりにオブジェクトが設定された状態に戻ります。ただし、デフォルトのコンストラクターをオブジェクトに追加するとすぐにJsonConvert.DeserializeObject<Result>(jsontext)
、プロパティを呼び出すと、データが入力されなくなります。
この時点でnew JsonSerializerSettings(){CheckAdditionalContent = true}
、逆シリアル化の呼び出しに追加してみました。それは何もしませんでした。
別のメモ。コンストラクターのパラメーターは、パラメーターが小文字で始まることを除いて、フィールドの名前と正確に一致します。先に述べたように、デシリアライゼーションはデフォルトのコンストラクターがなくても問題なく機能するため、これは問題にならないと思います。
これが私のコンストラクタのサンプルです:
public Result() { }
public Result(int? code, string format, Dictionary<string, string> details = null)
{
Code = code ?? ERROR_CODE;
Format = format;
if (details == null)
Details = new Dictionary<string, string>();
else
Details = details;
}