xsd.exe不会为xs:list标记创建集合(数组或列表)

时间:2018-07-26 16:57:37

标签: xml xsd xsd.exe

我有以下xsd标记,希望可以在反序列化时创建一个集合,但是没有。

d.fy

当我使用命令<Metrics> .... .... <xs:simpleType name="idType"> <xs:restriction base="xs:int"> <xs:minInclusive value="0"/> <xs:maxInclusive value="99"/> </xs:restriction> </xs:simpleType> ... ... <xs:element name="RPT"> <xs:simpleType> <xs:list itemType="idType"/> </xs:simpleType> </xs:element> ... ... </Metrics> 创建类时,创建的RPT为:

xsd /c <xsd-filename>.xsd

我希望public partial class Metrics { ... ... private string rPTField; ... ... } 是返回列表元素的集合类型。 我该怎么办?

2 个答案:

答案 0 :(得分:0)

基本上,Xsd.exe倾向于将嵌套类型视为字符串,因为它们可能变得非常复杂,受限类型的并集列表等...如果您有xs:int的列表,则可能会碰巧。 / p>

<xs:element name="RPT">
    <xs:simpleType>
        <xs:list itemType="xs:int"/>
    </xs:simpleType>
</xs:element>

或者看看Xml Objects online generator,它会从您的XSD中生成类似这样的代码

XSD

<!--Created with Liquid Studio 2019 (https://www.liquid-technologies.com)-->
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:simpleType name="idType">
        <xs:restriction base="xs:int">
            <xs:minInclusive value="0" />
            <xs:maxInclusive value="99" />
        </xs:restriction>
    </xs:simpleType>
    <xs:element name="MyRootElement">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="RPT">
                    <xs:simpleType>
                        <xs:list itemType="idType" />
                    </xs:simpleType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

生成的代码

#region Elements
/// <summary>A class representing the root XSD element MyRootElement</summary>
/// <XsdPath>schema:schema.xsd/element:MyRootElement</XsdPath>
/// <XsdFile>file://sandbox/schema.xsd</XsdFile>
/// <XsdLocation>10:5-20:18</XsdLocation>
[LxSimpleElementDefinition("MyRootElement", "", ElementScopeType.GlobalElement)]
public partial class MyRootElementElm
{
    /// <summary>A <see cref="System.Int32" />[], Required : should not be set to null</summary>
    [LxElementValue("RPT", "", LxValueType.List, XsdType.XsdInt, MinOccurs = 1, MaxOccurs = 1)]
    public System.Int32[] RPT { get; set; } = new System.Int32[] {};

}
#endregion

它不会拾取嵌套的构面0-99,但是它使类型正确。它对于小型XSD也是免费的。

答案 1 :(得分:0)

@ Sprotty 我使用了在线生成器,但是xsd.exe没有给我代码清单!如何使用xs:list?