使用xsd.exe工具从xsd文件创建类后,出现此错误。所以我在网上搜索并找到了解决方案。这是链接:http://satov.blogspot.com/2006/12/xsdexe-generated-classes-causing.html
问题是这会使代码运行,但不知何故反序列化数据似乎已损坏。我做了网站建议的内容,最后第二个数组维度总是空的(参见网站的评论,有人也有这个问题)。问题是,我现在该如何解决这个问题?是否有另一种工具来创建xsd文件?我尝试了Xsd2Code,没有成功。
谢谢: - )
答案 0 :(得分:110)
您需要更改序列化类中成员变量的类型。例如,如果它引发错误,如:
无法生成临时类(result = 1)。 错误CS0030:无法将类型'Data []'转换为'Data'。
我在生成的文件中搜索了数据类型名称,我发现了这个:
[System.Xml.Serialization.XmlArrayItemAttribute("Data", typeof(Data), IsNullable=false)]
public Data[][] Row
将Data[][]
替换为Data[]
- 将数据类型从2D数组更改为1D数组。它会解决你的问题。 :)
答案 1 :(得分:13)
有同样的问题,但Xsd2Code没有与VS2012集成。所以我去了我的xsd.exe生成的.cs文件并做了:
查找[] [] 替换[]
有效。
答案 2 :(得分:7)
我收到了这个错误。在您的解决方案中,该文件中有reference.cs文件,您需要搜索“[] []”,然后会有两个结果..
您需要从两个地方删除“[] []”中的一个“[]”..
对我有用..
谢谢..
答案 3 :(得分:2)
添加 <xs:attribute name="tmp" type="xs:string" />
每一次之后
<xs:sequence maxOccurs="unbounded">
<xs:element ../>
</xs:sequence>
和
<xs:sequence>
<xs:element maxOccurs="unbounded"/>
</xs:sequence>
模式文件中的元素如果您不想丢失数组的维度。
答案 4 :(得分:1)
如果它在VB.net中,那么你必须在Reference.vb中搜索()()并替换为()
答案 5 :(得分:1)
对我而言,修补用于生成代码的XML是有帮助的。它发生在:
<Names>
<Name></Name>
<Name></Name>
</Names>
然后通过xsd优化到双数组名称输入
我做的是:
<Names>
<Dummy></Dummy>
<Name></Name>
<Name></Name>
</Names>
xsd不优化它,但保留单个数组名称
答案 6 :(得分:0)
对于我的情况,由于XmlArrayItem属性属性声明无效而导致的问题。
来自
[XmlArrayItem("MyArray", typeof(string))]
public List<ClassName> Items{ get; set; }
我改变了适当的类型:从string到ClassName
[XmlArrayItem("MyArray", typeof(ClassName))]
public List<ClassName> Items{ get; set; }
希望这有帮助!
答案 7 :(得分:0)
这真的是@WaldemarGałęzinowski 的回答https://stackoverflow.com/a/35896991/157224 扩大了一点。
xsd.exe
有一个优化,当您在序列中有一个没有属性的无界元素时,该优化就会启动。
优化将避免为父级创建特殊类型,而是将其设为子级数组。
ChildType[] Parent { get; set; }
而不是 ParentType Parent { get; set; }
并且您可以像 Parent[0]
而不是 Parent.Child[0]
那样访问孩子。
(我觉得这个优化有时有点混乱)
这里发生的事情是你多了一层无界、无属性的元素
优化应用了两次,结果是 GrandChildType[][] Parent {get; set;}
,并且您访问了 favorite 的第一个孙子,例如 Parent[0][0]
而不是 Parent.Child[0].GrandChild[0]
。
问题是 .Net 序列化程序不支持数组数组并生成无效代码。
我不知道为什么微软这么多年都没有修复这个错误,但解决方法很简单。
只需通过向序列添加可选属性或可选元素来强制 xsd.exe
为父级或子级生成一个类。例如
导致Parent[0].GrandChild[0]