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.