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 からのアドバイスに従って、次の行を From: に変更しました。

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プロパティがフィールド (ジャグ配列) を 1 次元配列として返そうとしているのに対し、setは 1 次元配列を (ジャグ配列) フィールドに割り当てようとしているため、エラー メッセージは互いに逆です。(40行目はget、43行目はsetです。)

Serversおそらく、同じことを自分のプロパティにも適用したいと思うでしょう。

そもそも、XSD.exe がこのような恐ろしいコードを生成する原因は何なのかはわかりませんが...

于 2013-02-11T17:17:24.970 に答える