无法生成临时类(result = 1)。错误CS0030:无法转换类型

时间:2013-02-11 13:45:16

标签: xml class xml-deserialization xsd.exe

this post

中的症状相同的症状

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

  

无法生成临时类(result = 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

2 个答案:

答案 0 :(得分: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)]

答案 1 :(得分:0)

属性及其支持字段都需要更改。在ProductEnvironment.cs中,您还应该更改此行:

private ProductEnvironmentServerRolesServerRole[][] serverRolesField;

阅读本文:

private ProductEnvironmentServerRolesServerRole[] serverRolesField;

错误消息是彼此相反的,因为属性的get试图将您的字段(锯齿状数组)作为单维数组返回,而set正在尝试分配单个数据 - 尺寸数组到(锯齿状数组)字段。 (第40行是get,第43行是set。)

您可能也希望将相同的内容应用到Servers媒体资源中。

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