3

与这篇文章中的症状相同

基本症状是,当我使用 xsd.exe 从我的 XML 创建 C# 类时,当我尝试反序列化它时,我收到此错误(它编译,但在运行时产生错误)。

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

原文(来自(xsd.exe)产生的.cs:

[System.Xml.Serialization.XmlArrayAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
[System.Xml.Serialization.XmlArrayItemAttribute("ServerRole", typeof(ProductEnvironmentServerRolesServerRole), Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=false)]
public ProductEnvironmentServerRolesServerRole[][] ServerRoles
{
    get { return this.serverRolesField; }
    set { this.serverRolesField = value; }
}

但是根据 Ajax 的建议,我将以下行从:

public ProductEnvironmentServerRolesServerRole[][] ServerRoles {

至:

public ProductEnvironmentServerRolesServerRole[] ServerRoles {

这会导致以下编译错误:

错误 1 ​​无法将类型 'ProductEnvironmentServerRolesServerRole[][]' 隐式转换为 'ProductEnvironmentServerRolesServerRole[]' d:\Users...\Documents\Visual Studio 2012\Projects\ReadingXMLDummy\ReadingXMLDummy\ProductEnvironment.cs 40 20 ReadingXMLDummy
错误 2无法隐式转换类型 'ProductEnvironmentServerRolesServerRole[]' 到 'ProductEnvironmentServerRolesServerRole[][]' d:\Users...\Documents\Visual Studio 2012\Projects\ReadingXMLDummy\ReadingXMLDummy\ProductEnvironment.cs 43 37 ReadingXMLDummy

两者都是对方的倒数。我很困惑,迫切需要帮助:-) 在此先感谢

PasteBin:Program.cs PasteBin:ProductEnvironment.cs

4

2 回答 2

2

这里的问题不是为属性生成类型,而是为属性输入属性:

[System.Xml.Serialization.XmlArrayItemAttribute("ServerRole", typeof(ProductEnvironmentServerRolesServerRole), Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=false)]

应该改为

[System.Xml.Serialization.XmlArrayItemAttribute("ServerRole", typeof(ProductEnvironmentServerRolesServerRole[]), Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=false)]
于 2014-01-02T06:20:07.817 回答
0

属性及其支持字段都需要更改。在你的ProductEnvironment.cs你也应该改变这一行:

private ProductEnvironmentServerRolesServerRole[][] serverRolesField;

阅读这个:

private ProductEnvironmentServerRolesServerRole[] serverRolesField;

错误消息是相反的,因为该属性get试图将您的字段(锯齿状数组)作为单维数组返回,而该属性试图set将单维数组分配给(锯齿状数组)字段。(第 40 行是 get,第 43 行是 set。)

您可能也希望将相同的方法应用于您的Servers财产。

我不确定是什么会导致 XSD.exe 首先生成如此可怕的代码,但......

于 2013-02-11T17:17:24.970 回答