子クラスを XML にシリアル化するときに、親クラスのプロパティを無視することは可能ですか? 可能であればJSONでもこれを行いたいのですが、可能であればxmlを最初に動作させたいと思います。
たとえば、次のような基本クラスがあるとします。
[Serializable]
[DataContract]
public abstract class BaseClass
{
protected string _correlationID;
private bool _isValid;
/// <summary>
/// get/set the correlation id
/// </summary>
[DataMember]
public virtual string CorrelationID
{
get{ return _correlationID; }
set{ _correlationID = value; }
}
/// <summary>
/// get/set IsValid
/// </summary>
[DataMember]
public virtual bool IsValid
{
get { return _isValid; }
set { _isValid = value; }
}
}
そして、このような子クラス
[Serializable]
[DataContract]
public class MyClass : BaseClass
{
private int _objectId;
private string _objectName;
/// <summary>
/// get/set the object id
/// </summary>
[DataMember]
public int ObjectId
{
get { return _objectId; }
set { _objectId = value; }
}
/// <summary>
/// get/set the object name
/// </summary>
[DataMember]
public int ObjectName
{
get { return _objectName; }
set { _objectName = value; }
}
[XmlIgnore]
public override string CorrelationID
{
get{ return _correlationID; }
set{ _correlationID = value; }
}
}
xml を次のように返したい:
<MyClass>
<IsValid>true</IsValid>
<ObjectId>5</ObjectId>
<ObjectName>My Object</ObjectName>
</MyClass>
ただし、仮想プロパティをオーバーライドして xml 無視属性を追加しようとすると、指定していないかのように xml と属性が次のようになります。
<MyClass>
<CorrelationID>12345678910</CorrelationID>
<IsValid>true</IsValid>
<ObjectId>5</ObjectId>
<ObjectName>My Object</ObjectName>
</MyClass>
[IgnoreDataMember]も試してみましたが、結果は同じです。
MVC/Web API でこれを開始しようとしていますが、可能であれば WCF にも適用できるようにしたいと考えています。
どんな方向でも役に立ちます。前もって感謝します。