私はServiceStackを使用して、いくつかのオブジェクトをJSONにシリアル化および逆シリアル化しています。この例を考えてみましょう:動物のフィールドは動物の種類ではなく、犬の種類としてインスタンス化されているためタイプ情報を保持するためのServiceStackの取得
public class Container
{
public Animal Animal { get; set; }
}
public class Animal
{
}
public class Dog : Animal
{
public void Speak() { Console.WriteLine("Woof!"); }
}
var container = new Container { Animal = new Dog() };
var json = JsonSerializer.SerializeToString(container);
var container2 = JsonSerializer.DeserializeFromString<Container>(json);
((Dog)container.Animal).Speak(); //Works
((Dog)container2.Animal).Speak(); //InvalidCastException
最後の行は、InvalidCastExceptionがスローされます。この特定のインスタンスがDog型の情報を保持するようにServiceStackに指示する方法はありますか?
私は本質的に同じDTOを取る複数のサービスを持っている場合に何をすべきですか?たとえば、ユーザー登録サービスとユーザー保守サービスはありますか?どちらのフィールドにもフィールドを入力する必要のあるUserAccount DTOがあります。リポジトリは、UserAccountテーブルを挿入または更新する予定であるため、UserAccount DTOが必要です。そこで私はUserAccount DTOを作成しました。 UserRegistration DTOとUserMaintenance DTOは、それを継承します。 [ServiceStackの作成に大きな感謝を寄せています。] – GeorgeBarker
ええと...自分の答えは明らかに明白なコメント/質問です。メッセージはビジネスドメインオブジェクトになるべきではなく、もっと)。 "持っている"と "ある"の単純な問題は "です"。したがって、私の例では、UpdateUserMsgとRegisterUserMsgはどちらもUserAccount DTOを含んでいます。どちらもUserAccount DTOではありません。継承の必要はありません。 – GeorgeBarker
継承のないリストはどのように扱いますか?例えば、 'List'というプロパティを持つDTOを持っていて、 'IAnimal'を実装する20のクラスがあります。 –
Cocowalla