Désolé pour un titre merdique. N'hésitez pas à le changer pour un meilleur.XML désérialisation d'objets faiblement typés dans .NET
Le problème est le suivant: j'ai besoin de lire un ensemble de fichiers XML qui ressemblent à ceci:
<rootElement>
<header>
<!-- some stuff here -->
</header>
<businessContent>
<oneOfSeveralAllowedSubNodesHereLikeCustomer />
<businessContent>
</rootElement>
Je suis xsd.exe
pour générer des classes C# à partir d'un fichier de schéma que j'ai et il fait comme ça (simplifié):
public class rootElement
{
public header header {get;set;}
public object businessContent {get;set;}
}
// other classes like header and classes for the values
// allowed within business content, say customer
Notez que le type de businessContent
est System.Object
qui est assez juste. Le schéma ne dit rien explicitement de ce qui peut réellement être mis là. Mais j'ai un fichier xml qui a un customer
l'intérieur de son businessContent
. le client est défini dans le xsd et le xsd.exe
a généré une classe pour cela aussi. Je me attends à une instance de cette classe à créer et mettre mon businessContent
mais quand je lis le XML:
var serializer = new XmlSerializer(typeof(rootElement));
var root = (rootElement)serializer.Deserialize(stream));
var customer = (customer)root.businessContent;
-je obtenir une exception, car le type de root.businessContent
est XmlNode[]
et non customer
.
Alors, comment puis-je faire le sérialiseur pour désérialiser complètement mon objet, c'est-à-dire avec customer
et non XmlNode[]
à l'intérieur?
Cette exception se retrouve dans se plaignant que le client de type anonyme ne peut pas être utilisé ici – kko
Est-ce une erreur de compilation ou d'une exception d'exécution? Pouvez-vous nous donner le message d'erreur exact? 'client' n'est pas un type anonyme, donc je ne comprends pas ce que vous avez dit. –
il a [System.Xml.Serialization.XmlTypeAttribute (AnonymousType = true)] – kko