私は抽象クラスを持っています。それをLifeformと呼ぼう。抽象基本クラスを直列化しないASMX Webサービス
がpublic abstract class Lifeform {
public virtual int Legs { get; set; }
public virtual int Arms { get; set; }
public virtual bool Alive { get; set; }
}
(仮想属性が、私は、彼らが仮想プロパティはいないのであればwhinesがNHibernateはを、使用しているという事実によるものである。)
が、私はそれから継承するクラスを持っている:それは何かのように見えますそのLifeformクラスから。私たちは人間と呼ぶでしょう。それは次のようになります。
public class Human: Lifeform {
public virtual bool Hat { get; set; }
public virtual int Age { get; set; }
public virtual string Name { get; set; }
}
すべての美しい、私はそれを使用していたとき、私は私のクラスを使用することができ、人間の脚、腕、およびアライブプロパティを取得します。ただし、ヒューマンクラスを使用してWebサービスを作成しようとしたときを除きます。シリアライズされたオブジェクトは、私に帽子、年齢、および名前を与えますが、Legs、Arms、またはAliveプロパティはありません。
私は、基本クラス(生命体)で
[System.Xml.Serialization.XmlInclude(typeof(Human))]
を使用することを提案している回避策を見てきましたが、それはOOに違反恐ろしいハックのように思えます。ベースクラスのリンクを継承するクラスにリンクを張っていますか? Eww。
以前にこの特定の問題に遭遇した人はいますか?アイデアはありますか?より詳細な例が私が何をしているのかを説明するのに役立つなら、もっとコードを提供します。
私は同じ問題を抱えていました。これが私の解決に役立ちました。私はそれを返すメソッドの代わりに、クラスの属性を設定し終わった。 – Guffa