XmlSerializer InvalidOperationExc - 转换类型的已知问题
我正在针对 XSD.EXE 生成的类使用 XmlSerializer。
XmlSerializer serializer = new XmlSerializer(obj.GetType());
呕吐
InvalidOperationException 无法 生成一个临时类(结果=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...-->
I am using XmlSerializer against an XSD.EXE generated class.
XmlSerializer serializer = new XmlSerializer(obj.GetType());
Throws up
InvalidOperationException Unable to
generate a temporary class (result=1).
error CS0030: Cannot convert type
'itemOrderItemsItem[]' to
'itemOrderItemsItem' error CS0029:
Cannot implicitly convert type
'itemOrderItemsItem' to
'itemOrderItemsItem[]'
The fix (labeled <!--fix...-->
below) says to add some silly element to my schema, but this isn't working. This fix is five years old. Is there a solution yet?
<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...-->
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您有 Xsd.exe 形式的 XML
,将生成一个 xsd:
那么
生成具有二维数组 (items[][]) 的类。我只想要一个一维数组。我更改了第一行:
现在可以了。我猜序列化器只是在二维数组上吐槽。幸运的是我不需要它们。
If you have XML of the form
Xsd.exe will generate a xsd:
Then
Generates a class with two dimensional arrays (items[][]). I only wanted a one dimensional array. I changed the first line:
Now it works. Guess the serializer just barfs on two dimensional arrays. Luckily I dont need them.
这为我修复了,在子元素具有 maxOccurs="unbounded" 的 xsd 文件中,我在
之后添加了额外的行:
这是一个已知问题XmlSerializer代码生成组件:它无法处理嵌套无界元素的某些情况。它创建的对象模型无效:用户无法使用它来生成 xml 消息。
不幸的是,要解决此问题,您必须编辑架构以确保正确处理所有类似数组的构造。
您需要稍微修改具有以下内容的所有架构构造:
或
必须更改为(分别)
或
This fixed it for me, in xsd file where child element had maxOccurs="unbounded" I added extra line after
</xs:sequence>
:its a known problem in XmlSerializer Code Generation component: it cannot handle some cases of nested unbounded elements. The Object Model it creates is not valid: user cannot use it to produce xml messages.
Unfortunately to fix this you have to edit your schema to make sure that all array-like constructs will be handled properly.
You would need to slightly modify all schema constructs that have the following:
or
Have to be changed to (respectively)
or