我有以下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;
...
...
}
是返回列表元素的集合类型。
我该怎么办?
答案 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?