基本的症状是当我使用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
答案 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首先生成如此可怕的代码,但是......