我使用的工具Xsd2Code使用xml模式定義文件生成包含多個部分類的DespatchAdvice.designer.cs文件。在我的程序中,我可以方便地填充相關數據並將輸出序列化爲xml。是否可以在另一個類中裝飾公共屬性?
然而情況往往如此,並不是所有的都是我想要的。我不需要一些最終序列化的元素,而不填充數據只是簡單地將它們序列化爲空元素。由此產生的xml必須符合我們客戶設定的嚴格標準,這些空白元素「打破」了這些標準。
我有幾個選擇來解決這個問題。我可以從原始的xsd模式文件中刪除這些元素,但它們是由GS1標準組織生成的,任何更新都會破壞我自己的自定義設置,或者至少要求我重新應用它們。
或者我可以修改由Xsd2Code生成的.cs文件,刪除那些不需要的屬性。但是,與上面類似的情況下,任何.cs的再生都會破壞我的修改。
我現在採用的方法是對後者進行修改,用.XmlIgnoreAttribute()修飾.cs文件中不需要的屬性。在下面的代碼片段Manifest已由該工具生成,但不能在生成的xml中序列化。除XmlIgnoreAttribute行外,所有代碼都是自動生成的。
[System.Xml.Serialization.XmlElementAttribute(Order = 3)]
public DocumentIdentification DocumentIdentification
{
get
{
return this.documentIdentificationField;
}
set
{
this.documentIdentificationField = value;
}
}
[System.Xml.Serialization.XmlIgnoreAttribute()] // Exclude Manifest
[System.Xml.Serialization.XmlElementAttribute(Order = 4)]
public Manifest Manifest
{
get
{
return this.manifestField;
}
set
{
this.manifestField = value;
}
}
[System.Xml.Serialization.XmlArrayAttribute(Order = 5)]
[System.Xml.Serialization.XmlArrayItemAttribute(IsNullable = false)]
public List<Scope> BusinessScope
{
get
{
return this.businessScopeField;
}
set
{
this.businessScopeField = value;
}
}
因此,我的問題的關鍵。有沒有一種方法可以應用XmlIgnoreAttribute而不修改生成的DespatchAdvice.designer.cs文件(並且不必在重載中重新編碼整個Manifest塊)?
編輯:
這些是我在生成.cs文件時使用的選項。突出顯示從默認值更改的值。
其他類聲明爲「partial」嗎? –
Romano,不確定你指的是哪一個「其他」類。生成的.cs包含多個部分類。儘管唯一其他的真正的類是我的程序類(這不是部分的,但會有幫助嗎?),但我還有其他所有的東西都可以免費統治。對不起,部分類對我來說有些未知。 –
你能提供一個證明這一點的[mcve]嗎?因爲(通常)將屬性設置爲null會阻止它被序列化 - 參見[this fiddle](https://dotnetfiddle.net/jKW2L6)。也就是說,你所要求的可以用['XmlAttributeOverrides'](https://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlattributeoverrides(v = vs.110))完成。 ASPX)。 –