我使用的工具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)。 –