ベースにabsractプロパティがあり、2つの派生クラスによってオーバーライドされます。プロパティをそのうちの 1 つに対してシリアル化する必要がありますが、他のプロパティはシリアル化しません。
[Serializable]
[DataContract(IsReference = true)]
public abstract class Component
{
public abstract bool IsSelected { get; set; }
}
[Serializable]
[DataContract]
public class Leaf : Component
{
[DataMember]
public override bool IsSelected { get; set; } // serialized
}
[Serializable]
[DataContract]
public class Composite : Component
{
private List<Component> componentList = new List<Component>();
/// <summary>
/// Should *not* be serialized
/// </summary>
public override bool IsSelected
{
get
{
foreach (Component component in componentList)
{
if (!component.IsSelected)
return false;
}
return true;
}
set
{
foreach (Component component in componentList)
component.IsSelected = value;
}
}
}
リーフの「IsSelected」プロパティに [DataMember] 属性を配置するだけで十分だと思いましたが、どうやら、リーフのプロパティでさえシリアル化されていないようです。
ありがとう!