MSDN給出瞭如何使XmlSerializer類忽略一個類的屬性一個很好的例子,被序列化:http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlattributes.xmlignore.aspx如何讓XmlSerializer忽略要序列化的數組中的屬性?
我使用XmlSerializer類序列化對象的數組從EntityObject類繼承我希望XmlSerializer忽略EntityKey屬性。我已經寫了下面的代碼:
private void setupXmlSerializer()
{
XmlAttributeOverrides overrides = new XmlAttributeOverrides();
XmlAttributes attributesToOverride = new XmlAttributes();
attributesToOverride.XmlIgnore = true;
overrides.Add(typeof(MyEntityObject), "EntityKey", attributesToOverride);
completeXmlSerializer = new XmlSerializer(typeof(MyEntityObject[]), overrides);
}
然而,當我跑我的代碼,我得到相同的結果之前,我添加的代碼忽略的EntityKey我得到。爲了讓序列化的數組中的每個對象都使XmlSerializer忽略EntityKey,我需要做些什麼?
編輯:在回答我收到的答案,我試着寫了下面的代碼:
XmlAttributeOverrides overrides = new XmlAttributeOverrides();
XmlAttributes attributesToOverride = new XmlAttributes();
attributesToOverride.XmlIgnore = true;
attributesToOverride.XmlArrayItems.Add(new XmlArrayItemAttribute("EntityKey", typeof(MyEntityObject[])));
overrides.Add(typeof(MyEntityObject), attributesToOverride);
completeXmlSerializer = new XmlSerializer(typeof(MyEntityObject[]), overrides);
當我運行這段代碼,我得到一個異常:XmlRoot and XmlType attributes may not be specified for the type MyNamespace.MyEntityType
編輯再次:我寫了下面的代碼,它運行,但不會忽略EntityKey。我想知道這是否與Entity Framework設計類的方式有關。
XmlAttributeOverrides overrides = new XmlAttributeOverrides();
XmlAttributes attributesToOverride = new XmlAttributes();
attributesToOverride.XmlArrayItems.Add(new XmlArrayItemAttribute("EntityKey", typeof(EntityType[])));
attributesToOverride.XmlIgnore = true;
overrides.Add(typeof(EntityType), "EntityKey", attributesToOverride);
completeXmlSerializer = new XmlSerializer(typeof(EntityType[]), overrides);
編輯:我不知道這是否是相關的,但的EntityKey屬性具有以下屬性的聲明中EntityObject抽象類:
[DataMember]
[Browsable(false)]
public EntityKey EntityKey { get; set; }
有稱爲第二屬性使用XmlIgnore聲明的EntityState,所以我沒有必須忽略它的問題。
[XmlIgnore]
[Browsable(false)]
public EntityState EntityState { get; }
編輯:我做了一個發現。如果我試圖忽略EntityObject上的實際數據屬性之一,它可以正常工作。我想知道它是否可能與EntityKey使用屬性聲明有關,或者它是複雜類型,而其他屬性是基本類型。
還有一個類似的問題,關於忽略屬性的屬性,可能有關:http://stackoverflow.com/questions/17947998 –