comment ignorer savon de choses sur la désérialisation xml à l'objet?
Quand je reçois un xml, j'ai besoin de désérialiser un objet spécifique et de le transmettre via le paramètre à une méthode de service web.
Code:
var document = new XmlDocument();
document.Load(@"C:\Desktop\CteWebservice.xml");
var serializer = new XmlSerializer(typeof(OCTE));
var octe = (OCTE) serializer.Deserialize(new StringReader(document.OuterXml));
serviceClient.InsertOCTE(octe);
Mais quand j'essaie de désérialiser je reçois un message d'erreur indiquant que
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" > was not expected.
J'ai besoin d'ignorer l'enveloppe de la balise de SAVON et d'autres trucs.
Comment puis-je le faire?
Le fichier xml:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns="http://192.168.1.180:8085/">
<soapenv:Header/>
<soapenv:Body>
<ns:INCLUIRCONHECIMENTOFRETESAIDA>
<ns:CONHECIMENTOFRETE>
<ns:CSTICMS></ns:CSTICMS>
</ns:CONHECIMENTOFRETE>
</ns:INCLUIRCONHECIMENTOFRETESAIDA>
<soapenv:Body>
Code De Test:
XNamespace soap = "http://schemas.xmlsoap.org/soap/envelope/";
XNamespace m = "http://192.168.1.180:8085/";
var soapBody = xdoc.Descendants(soap + "Body").First().FirstNode;
var serializer = new XmlSerializer(typeof(OCTE));
var responseObj = (OCTE)serializer.Deserialize(soapBody.CreateReader());
Le savon Body
obtient le <ns:INCLUIRCONHECIMENTOFRETESAIDA>
avec toutes les informations dont j'ai besoin. Mais quand je le désérialiser à responseObj
je reçois de toutes les valeurs null.
Utilisation
Descendant, ne sais pas si je peux trouver ce membre sur la classe XmlDocument.
à droite, j'ai confondu avec
Je peux l'utiliser, mais alors avec des Descendant-je obtenir un IENumerable au lieu d'un OCTE objet
double possible de removing/l'extraction de savon en-tête et le corps du message soap
XDocument
et ne document.Descendant("OCTE")
? (ou quel que soit le nom de la racine doit être)Descendant, ne sais pas si je peux trouver ce membre sur la classe XmlDocument.
à droite, j'ai confondu avec
XDocument
. Pouvez-vous l'utilisation de cette classe à la place? De toute façon, si, je suis sûr qu'il y a un moyen de naviguer dans l'arborescence XML vers le bas de votre corps en valeur.Je peux l'utiliser, mais alors avec des Descendant-je obtenir un IENumerable au lieu d'un OCTE objet
double possible de removing/l'extraction de savon en-tête et le corps du message soap
OriginalL'auteur gog | 2013-12-09
Vous devez vous connecter pour publier un commentaire.
Je n'ai pas assez de détails pour remplir les espaces de noms et les noms d'élément pour vous, mais à l'aide de Le W3C exemple de réponse SOAP, le code suivant et les classes désérialiser l'objet:
Vous pourriez faire de même avec votre
OCTE
classe.la réponse correspond à ce qui est la classe qui reflète INCLUIRCONHECIMENTOFRETESAIDA. Je suppose que c'est OCTE, et ont ajouté un code qui indique quel type d'attribut, vous aurez besoin de mettre sur que pour le sérialiseur de comprendre que c'est ce qu'il est.
Oui, c'est l'OCTE de Classe. Je reçois les informations de la octe.xml fichier, puis desiarize à un OCTE objet ensuite d'envoyer à la webservice en tant que paramètre. Vais essayer votre solution. Merci!
ok j'arrive. maintenant, je peux obtenir la "important" du xml pour mon OCTE objet. Mais quand je désérialiser, je reçois toutes les valeurs null sur la responseObj.
vous avez probablement besoin d'inclure
XmlElementAttribute
s sur vos biens avec le nom et l'espace de noms (de sorte que le sérialiseur sait comment carte le XML de vos propriétés).OriginalL'auteur Tim S.
Je pense que c'est ce que vous êtes à la recherche pour
la suppression ou l'extraction de savon en-tête et le corps du message soap
OriginalL'auteur Mauricio Gracia Gutierrez