オブジェクトをシリアル化された XML として返す Web メソッドがいくつかあります。オブジェクトの NHibernate マップされたプロパティをシリアル化するだけです...誰か洞察がありますか? 私のクラスではなく、Webメソッドが実際にNHibernateプロキシをシリアライズしているようです。[XMLInclude] と [XMLElement] を使用してみましたが、プロパティがまだシリアル化されていません。私はこれを回避するための本当に恐ろしいハック的な方法を持っていますが、もっと良い方法があるかどうか疑問に思いました!
このようなもの:
<?xml version="1.0" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="StoryManager" assembly="StoryManager">
<class name="Graphic" table="graphics" lazy="false">
<id name="Id" column="id" type="int" unsaved-value="0" >
<generator class="identity"/>
</id>
<property name="Assigned" />
<property name="Due" />
<property name="Completed" />
<property name="UglyHack" insert="false" update="false" />
<many-to-one name="Parent" class="Story" column="story_id"/>
</class>
</hibernate-mapping>
public class Graphic
{
private int m_id;
public virtual int Id
{
get { return m_id; }
set { m_id = value; }
}
private DateTime? m_assigned;
public virtual DateTime? Assigned
{
get { return m_assigned; }
set { m_assigned = value; }
}
private DateTime? m_due;
public virtual DateTime? Due
{
get { return m_due; }
set { m_due = value; }
}
private DateTime? m_completed;
public virtual DateTime? Completed
{
get { return m_completed; }
set { m_completed = value; }
}
public bool UglyHack
{
get { return m_due < m_completed; } // return something besides a real mapped variable
set {} // trick NHibernate into thinking it's doing something
}
}
これは明らかにコードを書く方法ではありません。そこに「偽の」マッピング (UglyHack プロパティ) がない場合、そのプロパティはシリアル化されません。今のところ、(データ)転送オブジェクトの使用を検討しており、リフレクションを使用して何かに取り組んでいる可能性があります...