我有一个非常复杂的XSD架构,我已使用xsd.exe工具转换为类。我必须添加/编辑一些设置,以便考虑元素包含“选择”的情况。标签和可用选项都是不同的自定义类型。一切都很好。
我遇到的问题是包含'序列'的元素。标签并不总是按顺序序列化。我尝试使用order属性强制订单,例如:
<XmlElement(Order:=5)>
Public Property no_autor() As String
Get
Return Me.no_autorField
End Get
Set
Me.no_autorField = Value
End Set
End Property
但是,未正确序列化的类型是从基类型派生的。基类型只有两个元素,所以我命令它们为Order = 1和Order = 2。此时它开始变得混乱。派生类型在不同的类中,所以我在1或3处开始排序吗?我已经阅读了一些MSDN文档,其中指出基类型将始终首先序列化,因此我认为可能派生类型,即使从1开始排序,也会在基类型之后正确排序。当我尝试从1或3开始时,我只是简单地说明整个班级无法序列化,这只是一个无益的错误。
此外,如果属性用
装饰System.Xml.Serialization.XmlIgnoreAttribute()
我还在订购中加入它吗?
最后,是否有更好的方法来强制执行序列,因为它出现在XSD文件中?正如我所提到的,这个文件非常复杂,充满了Choice,Sequence和Extension标签。必须遍历每个元素,添加Order(然后让它倒故障)并计算所有派生类型(通常是两个或三个深度)并不是非常有效的时间使用。
答案 0 :(得分:0)
有一种更好的方法可以强制对Sequence标签中的元素进行排序。使用xsd.exe生成类结构时,请使用&#39; order&#39;开关。生成的类文件将包含所有必需的Order属性。
例如
C:\folder>xsd mySchema.xsd /l:VB /c /order
除此之外,我不明白为什么xsd实用程序不会强制执行排序,因为默认情况下在xsd文件中对此进行了描述。 Sequence标签专门用于强制包含元素中的特定顺序。似乎是多余的,必须表明您希望有序元素按顺序出现。