C# 无法生成临时类(结果=1)。错误CS0030:无法转换类型';类型[]和#x27;至';键入';?

C# 无法生成临时类(结果=1)。错误CS0030:无法转换类型';类型[]和#x27;至';键入';?,c#,xsd,xml-deserialization,C#,Xsd,Xml Deserialization,在使用xsd.exe工具从xsd文件创建类后,我出现了此错误。所以我搜索了一下网络,找到了一个解决方案。以下是链接: 问题是这会使代码运行,但反序列化的数据似乎已损坏。我按照网站的建议做了,最后第二个数组维度总是空的(见网站的评论,有人也有这个问题)。问题是,我现在如何解决这个问题?是否有其他工具来创建xsd文件?我尝试了XSD2代码,但没有成功 谢谢:-)您需要更改序列化类中成员变量的类型。例如,如果它引发了如下错误: 无法生成临时类(结果=1)。 错误CS0030:无法将类型“Data[]”

在使用xsd.exe工具从xsd文件创建类后,我出现了此错误。所以我搜索了一下网络,找到了一个解决方案。以下是链接:

问题是这会使代码运行,但反序列化的数据似乎已损坏。我按照网站的建议做了,最后第二个数组维度总是空的(见网站的评论,有人也有这个问题)。问题是,我现在如何解决这个问题?是否有其他工具来创建xsd文件?我尝试了XSD2代码,但没有成功


谢谢:-)

您需要更改序列化类中成员变量的类型。例如,如果它引发了如下错误:

无法生成临时类(结果=1)。 错误CS0030:无法将类型“Data[]”转换为“Data”

我在生成的文件中对数据类型名称进行了搜索,发现:

[System.Xml.Serialization.XmlArrayItemAttribute("Data", typeof(Data), IsNullable=false)]
public Data[][] Row

数据[]
替换
数据[]
-将数据类型从二维数组更改为一维数组。这会解决你的问题。:)

也有同样的问题,但是Xsd2Code没有与VS2012集成。因此,我转到我的xsd.exe生成的.cs文件并执行了以下操作:

查找[][] 替换[]


有效。

对于我的案例,问题案例是由于XmlArrayItem属性的声明无效

[XmlArrayItem(“MyArray”,typeof(string))]
公共列表项{get;set;}
我使用适当的类型进行了更改:从string改为ClassName

[XmlArrayItem("MyArray", typeof(ClassName))]
public List<ClassName> Items{ get; set; }
[XmlArrayItem(“MyArray”,typeof(ClassName))]
公共列表项{get;set;}

希望这有帮助

如果它在VB.net中,那么您需要在Reference.VB中搜索()(),并替换为()

添加
每次之后






元素,如果您不想丢失数组的维度,则会出现此错误。在您的解决方案中,该文件中有reference.cs文件,您需要搜索“[[]”,然后其中会有两个结果

在您需要从两个位置的“[]”中删除一个“[]”之后

它对我有用


谢谢..

对我来说,它有助于修补用于生成代码的XML。它发生在以下情况:

<Names>
    <Name></Name>
    <Name></Name>
</Names>

然后,通过xsd将其优化为双数组名条目

我所做的是:

<Names>
    <Dummy></Dummy>
    <Name></Name>
    <Name></Name>
</Names>


xsd没有对其进行优化,而是保留了单个数组名

这确实是@WaldemarGałzinowski的答案 扩大了一点

xsd.exe
有一个优化,当序列中有一个没有属性的无界元素时,这个优化就会生效

优化将避免为父级创建特殊类型,而是使其成为子级数组

ChildType[]Parent{get;set;}
而不是
ParentType Parent{get;set;}
并且您可以像
Parent[0]
那样访问子级,而不是
Parent.Child[0]
。 (我发现这种优化有时有点令人困惑)

这里发生的事情是,您还有一个级别的无边界、无属性元素

优化应用了两次,结果是
grandType[][]Parent{get;set;}
并且您可以访问您最喜欢的第一个孙子,如
Parent[0][0]
而不是
Parent.Child[0]。孙子[0]

问题在于.Net序列化程序不支持数组数组,并生成无效代码。

我不知道为什么微软这么多年来都没有修复这个错误,但解决方法很简单

只需强制
xsd.exe
通过向序列中添加可选属性或可选元素,为父级或子级生成一个类。例如


这导致了父[0]。孙[0]

您看到这里的讨论了吗:似乎您可以向xsd添加一个虚拟属性。不确定这是否是您面临的问题。我有一个模拟问题,但添加虚拟属性没有解决它,请参见我的问题:这已过时,博客链接已被锁定。感谢您的提示。但是为什么Microsoft XSD工具会生成2D数组呢?我在使用Microsoft的XSD为TD Ameritrade的股票经纪人API返回的XML生成类时遇到了同样的问题。。我想知道是否有比XSD.EXE更好的工具可以自动生成而无需手动清理C#类?我在一个XML中得到了太多的错误,我还有更多的错误要处理。。。!当我遇到这个问题时,我用重新生成了模式,解决了这个问题。为什么还没有解决这个问题,两年后我遇到了同样的问题,在序列化XSD.EXE生成的类型实例时遇到了同样的错误,错误在XSD.EXE生成的类中将2D数组更改为1D数组后得到了修复。谢谢。你能举个例子吗?在所有答案中,这是为我工作的一个。似乎VisualStudio在添加服务引用时犯了这个错误。
<Names>
    <Dummy></Dummy>
    <Name></Name>
    <Name></Name>
</Names>