Génération du schéma en C# sur base d'un XML

J'ai été confronté dernièrement à un petit problème en XML / Schéma !. Je vous replace le contexte. J'ai un objet que je souhaite sérialiser ... non pas pour le désérialiser ultérieurement mais pour passer la chaîne XML à un module externe qui effectuera des recherches XPATH pour récupérer les valeurs et les traiter. Mon module n'a aucune connaissance des classes de l'application !. La seule connaissance qu'il doit avoir est le type de chaque champ. La sérialisation de base ne crée pas de schéma et évidement ... chaque champ est considéré comme une chaîne .. Problème ! ... Le module externe doit formatter la valeur "double" ... etc ;-). Dès lors ! Comment faire ??? Voici la solution dans ce post ! Et un grand merci a Martin Honnen (MVP Xml) pour sa réponse.

Première étape !

J'ai une classe business :

public class ClassCoucou
{
    [XmlElement(ElementName = "Amount")]
    public double AA { get; set; }

    [XmlElement(ElementName = "Name")]
    public string Name { get; set; }
}

Deuxième étape !

Je veux la séraliser ! Rien de plus simple!

MemoryStream stream = new MemoryStream();
XmlSerializer serializer = new XmlSerializer(typeof(ClassCoucou));
serializer.Serialize(stream, new ClassCoucou() { AA = 4000.45, Name = "coucou" });

Troisième étape !

Je veux créer le schéma associé (et c'est la ou c'est moins simple). Je reviens dans mon flux au début!. Je vais créer une classe de Schéma Inference ... Et je vais reprendre le schéma du fichier XML !

stream.Flush();
stream.Position = 0;

XmlReader reader = XmlReader.Create(stream);
XmlSchemaInference schema = new XmlSchemaInference();
XmlSchemaSet schemaSet = new XmlSchemaSet();
schemaSet = schema.InferSchema(reader);
foreach (XmlSchema s in schemaSet.Schemas())
    s.Write(Console.Out);

Et c'est déjà la fin ! J'ai mon schéma ! A noter que par exemple je pourrais avoir ma propriété AA en double. Si je passe en paramètre une valeur 1 ... Il va créer un schéma avec le type en unsignedByte et non pas en double.

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

Fil des commentaires de ce billet

Page top