web-dev-qa-db-fra.com

Impossible de générer une classe temporaire (résultat = 1). erreur CS0030: impossible de convertir le type «Type []» en «Type»?

J'obtiens cette erreur après avoir créé une classe à partir de mon fichier xsd à l'aide de l'outil xsd.exe. J'ai donc cherché sur le net et trouvé une solution. Voici le lien: http://satov.blogspot.com/2006/12/xsdexe-generated-classes-causing.html

Le problème est que cela fait exécuter le code, mais les données désérialisées semblent en quelque sorte corrompues. J'ai fait ce que le site suggère et au final la 2ème dimension du tableau est toujours vide (voir les commentaires du site, quelqu'un a aussi eu ce problème). La question est, comment puis-je résoudre ce problème maintenant? Existe-t-il un autre outil pour créer le fichier xsd? J'ai essayé Xsd2Code, sans succès.

Merci :-)

48
grady

Vous devez modifier le type d'une variable membre dans la classe sérialisée. Par exemple, si cela déclenche une erreur comme:

Impossible de générer une classe temporaire (résultat = 1). erreur CS0030: impossible de convertir le type 'Data []' en 'Data'.

J'ai effectué une recherche sur le nom du type de données dans le fichier généré, et j'ai trouvé ceci:

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

Remplacer Data[][] avec Data[] - Modifiez le type de données d'un tableau 2D à un tableau 1D. Cela résoudrait votre problème. :)

114
Ajax

J'ai eu le même problème, mais Xsd2Code ne s'est pas intégré à VS2012. Au lieu de cela, je suis allé dans mon fichier .cs généré par xsd.exe et j'ai fait:

Rechercher [] [] Remplacer []

qui a fonctionné.

13
classicskids

J'ai obtenu cette erreur. Dans votre solution, il y a un fichier reference.cs dans ce fichier, vous devez rechercher "[] []", puis il y aura deux résultats.

Après avoir supprimé un "[]" de "[] []" des deux endroits.

Ça marche pour moi..

Merci..

7
shaishav shukla

Ajouter <xs:attribute name="tmp" type="xs:string" /> après chaque
<xs:sequence maxOccurs="unbounded"> <xs:element ../> </xs:sequence>
et
<xs:sequence> <xs:element maxOccurs="unbounded"/> </xs:sequence>
Élément dans votre fichier de schéma si vous ne voulez pas perdre la dimension du tablea.

Si c'est dans VB.net, vous devez rechercher () () dans votre Reference.vb et le remplacer par ()

1
JB9

Pour moi, cela aide à patcher le XML utilisé pour générer le code. Cela arrive quand:

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

alors cela est optimisé par xsd pour doubler l'entrée du nom du tableau

Ce que j'ai fait c'est:

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

le xsd ne l'optimise pas mais laisse le nom du tableau unique

1

Pour mon cas, le problème est dû à une déclaration non valide pour l'attribut de propriété XmlArrayItem.

De

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

J'ai changé avec le type approprié: de la chaîne à ClassName

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

J'espère que cela t'aides!

0
Ashraf Alam