Je rencontre ce qui doit être un problème TRÈS SILLY avec le Sérialiseur de contrat de données. Il refuse de travailler. J'essaye juste de sérialiser un objet dans un XmlDocument, cependant je semble frapper un mur.DataContractSerializer - Problèmes
Voici les DataContracts Je souhaite serialise:
[DataContract(Namespace="urn://test", Name = "ServiceFault1")]
public class ServiceFault
{
[DataMember()]
public int hello { get; set; }
[DataMember()]
public List<Error> Errors {get; set;}
}
[DataContract(Namespace = "urn://test", Name = "Error1")]
public class Error
{
[DataMember()]
public string ErrorCategoryCode { get; set; }
[DataMember()]
public string LocalErrorCode { get; set; }
[DataMember()]
public string Description { get; set; }
}
Et la méthode qui fait la sérialisation;
public static XmlDocument Serialize(ServiceFault toSer)
{
DataContractSerializer ser = new DataContractSerializer(toSer.GetType());
MemoryStream mem = new MemoryStream();
ser.WriteObject(XmlWriter.Create(mem), toSer);
XmlDocument tmp = new XmlDocument();
mem.Seek(0, SeekOrigin.Begin);
tmp.Load(mem);
return tmp;
}
Chaque fois que j'appelle la méthode de sérialisation, le flux de mémoire est toujours vide. J'ai essayé un constructeur de cordes, juste pour voir si quelque chose sortait. Si j'utilise le XmlSerializer cela fonctionne, mais je voudrais comprendre pourquoi le code ci-dessus ne fonctionne pas? Pourquoi le sérialiseur est-il toujours vide?
Merci pour toute aide! TM
Sur votre appel .WriteObject, juste passer dans un flux (comme "mem") - ne pas créer un XmlWriter: 'ser.WriteObject (mem, toSer);' –
@marc_s, que changerait-il? WriteObject va créer un XwlWriter sur le flux en interne de toute façon ... –
@ Thomas Levesque: dans mon cas, ** avec ** le XmlWriter, ça n'a pas marché, sans - ça fonctionne parfaitement ... allez ... –