按顺序

时间:2017-03-22 22:10:12

标签: .net xml serialization xsd

我有一个非常复杂的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(然后让它倒故障)并计算所有派生类型(通常是两个或三个深度)并不是非常有效的时间使用。

1 个答案:

答案 0 :(得分:0)

有一种更好的方法可以强制对Sequence标签中的元素进行排序。使用xsd.exe生成类结构时,请使用&#39; order&#39;开关。生成的类文件将包含所有必需的Order属性。

例如

C:\folder>xsd mySchema.xsd /l:VB /c /order

除此之外,我不明白为什么xsd实用程序不会强制执行排序,因为默认情况下在xsd文件中对此进行了描述。 Sequence标签专门用于强制包含元素中的特定顺序。似乎是多余的,必须表明您希望有序元素按顺序出现。