2011-07-06 4 views
7

J'écris un client pour un protocole qui utilise HTTP pour transporter des messages XML. Il est synchrone car je forme un document XML qui suit une DTD et l'envoie à une passerelle pour le protocole via POST avec la classe WebClient et j'obtiens un message de réponse XML du serveur distant pour indiquer l'état de transaction/ID de message/etc.Désérialise les messages XML en objets

Depuis que j'ai la DTD, est-il possible de créer des classes avec elle? Il y a une poignée de réponses possibles pour chaque type d '"opération" que mon message XML effectue et avoir des classes qui pourraient être hydratées par le serveur XML renvoyé serait avantageux.

Une fois que j'ai ces classes, quelles sont les étapes de base pour désérialiser le message XML du serveur en objets?

Répondre

4

Covert la DTD XSD (pas sûr si cette étape est encore nécessaire):

Free DTD to XSD conversion utility?

Générer la classe C# de la XSD (outil de ligne de commande, voici comment je le fais, pas sûr il y a une meilleure façon):

http://quickstart.developerfusion.co.uk/quickstart/howto/doc/xmlserialization/XSDToCls.aspx

sérialisation retour à la classe de XML:

http://support.microsoft.com/kb/815813

+0

Cela me permet définitivement de commencer ce que je voulais faire. J'ai converti la DTD en XSD en utilisant trang et généré des classes à partir du nouveau fichier XSD. Il devrait être facile de compléter le code pour sérialiser et désérialiser d'ici. Merci! – jlafay

1

Une fois que vous avez la chaîne xml, vous pouvez faire quelque chose comme ceci où T est votre objet générique.

public static T GetObjectFromXmlString<T>(string xml) 
{ 
    T result = default(T); 

    if (string.IsNullOrEmpty(xml)) 
     return result; 

    using (StringReader sr = new StringReader(xml)) 
    { 
     using (XmlTextReader xr = new XmlTextReader(sr)) 
     { 
      XmlSerializer serializer = new XmlSerializer(typeof(T)); 
      result = (T)serializer.Deserialize(xr); 
     }     
    } 

    return result; 
} 
+0

Bien, je vais devoir essayer ça. Auriez-vous une solution à apporter à l'autre partie de ma question? Je voudrais un processus trivial pour générer les classes à partir de la DTD. Je vais essayer les suggestions d'Eric H mais j'espérais que .Net ou VS2010 aurait un outil pour aider avec ça. – jlafay

+0

Je n'ai pas de meilleure façon de générer des classes à partir de la DTD. Je ne suis pas sûr de vos besoins, mais si vous devez le générer une fois (dtd est statique), je voudrais aller avec un outil. mais si vous devez générer dynamiquement des classes, vous pouvez lire le fichier dtd et utiliser la réflexion pour créer des classes ou des assemblages. juste une pensée. –

+0

Ouais je suis allé avec un outil parce que c'est statique car c'est un protocole. – jlafay

Questions connexes