J'ai un service WCF qui accepte une chaîne comme paramètre pour l'un de ses contrats d'exploitation. Cette chaîne a cependant un contenu xml.Sérialiser et désérialiser un XmlDocument dans WCF à l'aide de DataContractSerializer
Je dois convertir ceci en une classe marquée DataContract
mais qui n'est pas exposée au monde extérieur.
Je dois utiliser le DataContractSerializer
car les membres de classe ont l'attribut [DataMember]
défini sur un nom différent. Ex: la propriété Phone
a le nom DataMember défini comme "Telephone"
, donc quand je désérialise le xmldocument en utilisant le sérialiseur normal, j'obtiens une erreur car le désérialiseur cherche l'élément Phone
qui n'existe pas.
Comment désérialiser un XmlDocument
en utilisant le DataContractSerializer
? Une contrainte cependant est que je ne peux pas enregistrer le xmldocument dans un fichier.
EDIT: Trouvé un excellent article sur la sérialisation et désérialisation utilisant DataContractSerializer
here.
Mon code client:
string xmldata = "<Customer> +
System.Environment.NewLine+
"<Age>1</Age>"+
System.Environment.NewLine+
"<BirthDate>1900-01-01T01:01:01.0000000-05:00</BirthDate>" +
System.Environment.NewLine+
"<FistName>John</FistName>"+
System.Environment.NewLine +
"<LastName>Doe</LastName>" +
System.Environment.NewLine +
"</Customer>";
doc.LoadXml(xmldata);
Service1Client a = new Service1Client();
a.GetData(doc.OuterXml.ToString());
Mon code de service:
public string GetData(string per)
{
string xmldata = per;
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xmldata);
XmlDemo.Person a = Person.Create();
DataContractSerializer ser = new DataContractSerializer(a.GetType());
StringWriter stringWriter = new StringWriter();
XmlTextWriter xmlWriter = new XmlTextWriter(stringWriter);
xmlDoc.WriteTo(xmlWriter);
MemoryStream stream = new MemoryStream(Encoding.ASCII.GetBytes(stringWriter.ToString()));
stream.Position = 0;
XmlDictionaryReader reader = XmlDictionaryReader.CreateTextReader(stream, new XmlDictionaryReaderQuotas());
Person myContact = (Person)ser.ReadObject(reader, true);
return string.Empty;
}
Mon DataContract:
[Serializable]
[DataContract(Name = "Customer")]
public class Person
{
private Person() {}
[DataMember(Name = "FistName")]
public string FName { get; set; }
[DataMember(Name = "LastName")]
public string LName { get; set; }
[DataMember(Name = "Age")]
public int Age { get; set; }
[DataMember(Name = "BirthDate")]
public DateTime DOB { get; set; }
public static Person Create()
{
return new Person();
}
}
J'ai cette erreur chez Person myContact = (Person) ser.ReadObject (reader, true);
Error in line 1 position 11. Expecting element 'Customer' from namespace 'http://schemas.datacontract.org/2004/07/XmlDemo'.. Encountered 'Element' with name 'Customer', namespace ''.
Pourriez-vous reformuler la question et être un peu plus précis? Je ne comprends pas ce que vous voulez – alanquillin
@aquillin - Je l'ai reformulé – Developer