C# XmlSerializer InvalidoOperationExc-已知问题转换类型
我正在对XSD.EXE生成的类使用XmlSerializerC# XmlSerializer InvalidoOperationExc-已知问题转换类型,c#,xml-serialization,xsd.exe,C#,Xml Serialization,Xsd.exe,我正在对XSD.EXE生成的类使用XmlSerializer XmlSerializer serializer = new XmlSerializer(obj.GetType()); 吐出 无效操作异常无法 生成一个临时类(结果=1)。 错误CS0030:无法转换类型 “itemOrderItemsItem[]”到 “itemOrderItemsItem”错误CS0029: 无法隐式转换类型 “itemOrderItemsItem”到 “itemOrderItemsItem[]” 下面的(标签
XmlSerializer serializer = new XmlSerializer(obj.GetType());
吐出
无效操作异常无法
生成一个临时类(结果=1)。
错误CS0030:无法转换类型
“itemOrderItemsItem[]”到
“itemOrderItemsItem”错误CS0029:
无法隐式转换类型
“itemOrderItemsItem”到
“itemOrderItemsItem[]”
下面的(标签为
)说要在我的模式中添加一些愚蠢的元素,但这不起作用。这个补丁已经有五年历史了。有解决办法吗
<xs:sequence>
<xs:element name="item" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="model" type="xs:string" minOccurs="0" />
<xs:element name="description" type="xs:string" minOccurs="0" />
<xs:element name="material" type="xs:string" minOccurs="0" />
<xs:element name="lot" type="xs:string" minOccurs="0" />
<xs:element name="serial" type="xs:string" minOccurs="0" />
<xs:element name="transferQty" type="xs:string" minOccurs="0" />
<xs:element name="shipQty" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="tmp" type="xs:string" /><!--fix...-->
如果您有表单的XML
<items>
<item>
<model>10</model>
<description>Torque wrench</description>
<material>100</material>
<lot>3</lot>
<serial></serial>
<transferQty>1</transferQty>
<shipQty></shipQty>
</item>
<item>
//...
</item>
<item>
//...
</item>
</items>
10
扭矩扳手
100
3.
1.
//...
//...
Xsd.exe将生成一个Xsd:
<xs:element name="items" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="item" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="model" type="xs:string" minOccurs="0" />
<xs:element name="description" type="xs:string" minOccurs="0" />
<xs:element name="material" type="xs:string" minOccurs="0" />
<xs:element name="lot" type="xs:string" minOccurs="0" />
<xs:element name="serial" type="xs:string" minOccurs="0" />
<xs:element name="transferQty" type="xs:string" minOccurs="0" />
<xs:element name="shipQty" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
然后
xsd.exe“this.xsd”/c
生成具有二维数组(项[][])的类。我只想要一个一维数组。我更改了第一行:
<xs:element name="items" minOccurs="0"><!--got rid of maxOccurs (which is what causes the issue)-->
现在它起作用了。我猜序列化程序只是在二维数组上呕吐。幸运的是,我不需要它们。这为我修复了它,在xsd文件中,子元素有maxOccurs=“unbounded”,我在
之后添加了额外的一行:
<xs:attribute name="tmp" type="xs:string" />
这是XmlSerializer代码生成组件中的一个已知问题:它无法处理嵌套的无界元素的某些情况。它创建的对象模型无效:用户无法使用它生成xml消息
不幸的是,要解决这个问题,您必须编辑模式,以确保所有类似数组的构造都能得到正确处理。
您需要稍微修改具有以下内容的所有架构构造:
<xs:sequence maxOccurs="unbounded">
<xs:element ../>
<xs:sequence>
或
必须更改为(分别)
<xs:sequence maxOccurs="unbounded">
<xs:element ../>
<xs:sequence>
<xs:attribute name="tmp" type="xs:string" /> <!--FIX LINE TO BE ADDED-->
或
是否有指向错误报告的链接?这一点从dotnet开始就已经知道了,我们现在是第4版,问题仍然存在
<xs:sequence maxOccurs="unbounded">
<xs:element ../>
<xs:sequence>
<xs:attribute name="tmp" type="xs:string" /> <!--FIX LINE TO BE ADDED-->
<xs:sequence>
<xs:element maxOccurs="unbounded"/>
<xs:sequence>
<xs:attribute name="tmp" type="xs:string" /> <!--FIX LINE TO BE ADDED-->