J'ai du mal à désérialiser ce segment de code XML correspondant à une section Détail FAULT du service WCF SOAP à cause de l'attribut xsi: type = "p: OUTPUT-HEADER":XmlSerializer et xsi: deserialization
<p:OUTPUT-HEADER xsi:type="p:OUTPUT-HEADER" xmlns:p="http://aaa.bbb.ccc/v2" xmlns:ns0="http://aaa.bbb.ccc/v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<FAULT>
<p:COD-ERROR>2951</p:COD-ERROR>
<p:COD-SEV>8</p:COD-SEV>
<p:MSG-ERROR>Error message</p:MSG-ERROR>
</FAULT>
<CNL-OUT>xxx</CNL-OUT>
</p:OUTPUT-HEADER>
Ce sont les classes que je utilise:
[XmlInclude(typeof(OutputHeader))]
public abstract class FaultDetail
{
[XmlElement(ElementName = "FAULT", Namespace = "")]
public Fault FaultSection{ get; set; }
[XmlElement(ElementName = "CNL-OUT", Namespace = "")]
public string ClnOut{ get; set; }
}
[XmlRoot(ElementName = "OUTPUT-HEADER", Namespace = "http://aaa.bbb.ccc/v2")]
public class OutputHeader : FaultDetail
{
}
public class Fault
{
[XmlElement(ElementName = "COD-ERROR")]
public int CodigoError { get; set; }
[XmlElement(ElementName = "COD-SEV")]
public int Severidad { get; set; }
[XmlElement(ElementName = "MSG-ERROR")]
public string Mensaje { get; set; }
}
XmlSerializer:
XmlSerializer x = new XmlSerializer(typeof(OutputHeader));
Et t il erreur que je reçois lorsque vous appelez la méthode deserialize:
« Le type spécifié n'a pas été reconnu: nom = 'SORTIE HEADER', espace de nom = 'http://aaa.bbb.ccc/v2', à < SORTIE-HEADER xmlns = 'http://aaa.bbb.ccc/v2' >. "
Est-il possible de décorer les classes désérialiser ce XML correctement? Toutes les pensées sont grandement appréciées, merci!
WCF sérialise et désérialise automatiquement le contenu envoyé à travers le câble. Y a-t-il une raison spécifique pour laquelle vous voulez le faire manuellement? –
Je comprends que la méthode 'auto' devrait utiliser FaultException.GetDetail, mais aucune classe OutputHeader n'a été générée car le wsdl ne contient aucune information liée à cela. Donc mon prochain mouvement est d'obtenir le flux FaultException.GetReaderAtDetailContents() et d'essayer de le désérialiser. Ou est-ce que je manque quelque chose ici? Merci! –
mack