web-dev-qa-db-ja.com

一時クラスを生成できません(result = 1)。エラーCS0030:タイプ 'Type []'を 'Type'に変換できませんか?

Xsd.exeツールを使用してxsdファイルからクラスを作成すると、このエラーが発生します。そこで、ネットを検索して解決策を見つけました。リンクは次のとおりです。 http://satov.blogspot.com/2006/12/xsdexe-generated-classes-causing.html

問題は、これによりコードが実行されるが、どういうわけかデシリアライズされたデータが破損しているように見えることです。私はサイトが示唆することをしました、そして、結局、2番目の配列次元は常に空です(サイトのコメントを見てください、誰かもこの問題を抱えていました)。質問は、今どのようにこの問題を解決するのですか? xsdファイルを作成する別のツールはありますか? Xsd2Codeを試しましたが、成功しませんでした。

ありがとう:-)

48
grady

シリアル化されたクラスのメンバー変数の型を変更する必要があります。たとえば、次のようなエラーが発生した場合:

一時クラスを生成できません(result = 1)。エラーCS0030:タイプ 'Data []'を 'Data'に変換できません。

生成されたファイルのデータ型名で検索を実行したところ、次のことがわかりました。

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

Data[][]Data[]に置き換えます-データのタイプを2D配列から1D配列に変更します。それはあなたの問題を解決するでしょう。 :)

114
Ajax

同じ問題がありましたが、Xsd2CodeはVS2012と統合しませんでした。代わりに、xsd.exeで生成された.csファイルに移動して、次のことを行いました。

[] []を検索[]を置換

うまくいきました。

13
classicskids

私はこのエラーを受け取りました。あなたのソリューションでは、そのファイル内に「[] []」を検索する必要があるreference.csファイルがあり、2つの結果があります。

両方の場所の「[] []」から1つの「[]」を削除する必要がある場合。

わたしにはできる..

ありがとう。

7
shaishav shukla

追加 - <xs:attribute name="tmp" type="xs:string" />毎回
<xs:sequence maxOccurs="unbounded"> <xs:element ../> </xs:sequence>
そして
<xs:sequence> <xs:element maxOccurs="unbounded"/> </xs:sequence>
スキーマファイルの要素配列の次元を失いたくない場合

VB.netの場合、Reference.vbで()()を検索し、()で置き換える必要があります。

1
JB9

私にとっては、コードを生成するために使用されるXMLにパッチを適用すると役立ちます。次の場合に発生します。

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

次に、これはxsdによって最適化され、配列名エントリが2倍になります

私がしたことは:

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

xsdは最適化しませんが、単一の配列名を残します

1

私の場合、問題はXmlArrayItemプロパティ属性の無効な宣言が原因で発生します。

から

[XmlArrayItem("MyArray", typeof(string))]
public List<ClassName> Items{ get; set; }

適切なタイプに変更しました:文字列からClassNameに

[XmlArrayItem("MyArray", typeof(ClassName))]
public List<ClassName> Items{ get; set; }

お役に立てれば!

0
Ashraf Alam