コンストラクターは常に呼び出されます。私は通常2つのコンストラクターを持っています。1 つはシリアル化 (デフォルトのコンストラクター) 用で、もう 1 つはすべての「通常の」コード用です。
[DataContract]
public class Component
{
// for JSON.NET
protected Component()
{
}
public Component(allMandatoryFieldsHere)
{
// I'm doing some magic here.
}
}
そのようにして、開発者が必要なすべての情報を指定していることを確認することもできます。
ただし、情報を転送するときに DTO 以外を使用することはお勧めしません。そうしないと、オブジェクトのカプセル化を回避できるからです (誰でも任意のフィールドを任意の値で初期化できます)。良い。貧血モデル以外を使用する場合。
したがって、すべてのオブジェクトを初期化されていない方法で作成しているとは誰にもわからないため、使用FormatterServices.GetSafeUninitializedObject
は見苦しい回避策です。コンストラクターの初期化には理由があります。私が提案したように、「シリアル化」コンストラクターを提供することにより、クラスが実際のコンストラクターを呼び出さなくてもよいことを伝えることができる方が良いです。