J'ai la classe suivante:C# problème Désérialisation
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.1")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="urn:eu.emsa.ssn")]
public partial class SSN_ReceiptType {
private Header1Type headerField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Order=0)]
public Header1Type Header {
get {
return this.headerField;
}
set {
this.headerField = value;
}
}
}
Et le code XML suivant:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<SSN_Receipt xmlns="urn:eu.emsa.ssn">
<Header StatusMessage="SomethingSomething" StatusCode="Blabla" SSNRefId="N/A" MSRefId="2674762" Version="2.0" To="NCANOHAU1" SentAt="2010-11-12T14:48:44Z" From="SSN"/>
</SSN_Receipt>
Et j'utiliser cette méthode typée désérialiser (en appelant Deserialize <SSN_ReceiptType> (xmlGoesHere)) :
/// <summary>
/// Deserialize xml string to object of type T
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="xml"></param>
/// <returns></returns>
public static T Deserialize<T>(string xml)
{
try
{
// Create serializer
var xs = new XmlSerializer(typeof(T));
// Deserialize
T t = (T)xs.Deserialize(new StringReader(xml));
return t;
}
catch (Exception e)
{
log.Error(string.Format("Unable to deserialize XML: {0}", xml), e);
return default(T);
}
}
Maintenant, voici le kicker. Cela avait l'habitude de travailler. Mais récemment, nous avons reçu une nouvelle version du XSD utilisé pour générer les classes, et après avoir créé le nouveau code (qui est inchangé pour cette classe, et vu ci-dessus), je reçois l'exception suivante lorsque vous essayez de désérialiser:
System.SystemException: "Il y a une erreur dans le document XML (1, 57)"
Et en outre:
System.InnerException: < SSN_Receipt 'urne: eu.emsa.ssn' xmlns = > n'était pas prévu.
Que diable? : S J'ai essayé d'ajouter un XmlRootAttribute en spécifiant "SSN_Receipt", cela n'a pas aidé un bit. Quelqu'un sait ce qu'il se passe?
Mise à jour: sections pertinentes du XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:ssn="urn:eu.emsa.ssn"
attributeFormDefault="unqualified"
elementFormDefault="qualified"
targetNamespace="urn:eu.emsa.ssn">
[...]
<xsd:element name="SSN_Receipt" type="ssn:SSN_ReceiptType"/>
[...]
<xsd:complexType name="SSN_ReceiptType">
<xsd:annotation>
<xsd:documentation xml:lang="en"/>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="Header" type="ssn:Header1Type"/>
</xsd:sequence>
</xsd:complexType>
S'il vous plaît regarder votre langue. Ceci est un forum communautaire. –
Langue supprimée ... –
Quelles sont les différences entre les fichiers xsd? – Kell