Sérialiser un object en XElement et le désérialiser en mémoire

Je veux sérialiser un object en XML, mais je ne veux pas l’enregistrer sur le disque. Je veux le conserver dans une variable XElement (pour l’utiliser avec LINQ), puis désérialiser mon object.

Comment puis-je faire ceci?

Vous pouvez utiliser ces deux méthodes d’extension pour sérialiser et désérialiser entre XElement et vos objects.

public static XElement ToXElement(this object obj) { using (var memoryStream = new MemoryStream()) { using (TextWriter streamWriter = new StreamWriter(memoryStream)) { var xmlSerializer = new XmlSerializer(typeof(T)); xmlSerializer.Serialize(streamWriter, obj); return XElement.Parse(Encoding.ASCII.GetSsortingng(memoryStream.ToArray())); } } } public static T FromXElement(this XElement xElement) { var xmlSerializer = new XmlSerializer(typeof(T)); return (T)xmlSerializer.Deserialize(xElement.CreateReader()); } 

USAGE

 XElement element = myClass.ToXElement(); var newMyClass = element.FromXElement(); 

Vous pouvez utiliser XMLSerialization

La sérialisation XML est le processus de conversion des propriétés publiques et des champs d’un object en un format série (dans ce cas, XML) pour le stockage ou le transport. La désérialisation recrée l’object dans son état d’origine à partir de la sortie XML . Vous pouvez penser à la sérialisation comme moyen de sauvegarder l’état d’un object dans un stream ou un tampon. Par exemple, ASP.NET utilise la classe XmlSerializer pour encoder des messages de service Web XML

et XDocument Represents an XML document pour y parvenir

  using System; using System.Linq; using System.Xml; using System.Xml.Linq; using System.Xml.Serialization; namespace ConsoleApplication5 { public class Person { public int Age { get; set; } public ssortingng Name { get; set; } } class Program { static void Main(ssortingng[] args) { XmlSerializer xs = new XmlSerializer(typeof(Person)); Person p = new Person(); p.Age = 35; p.Name = "Arnold"; Console.WriteLine("\n Before serializing...\n"); Console.WriteLine(ssortingng.Format("Age = {0} Name = {1}", p.Age,p.Name)); XDocument d = new XDocument(); using (XmlWriter xw = d.CreateWriter()) xs.Serialize(xw, p); // you can use LINQ on elm now XElement elm = d.Root; Console.WriteLine("\n From XElement...\n"); elm.Elements().All(e => { Console.WriteLine(ssortingng.Format("element name {0} , element value {1}", e.Name, e.Value)); return true; }); //deserialize back to object Person pDeserialized = xs.Deserialize((d.CreateReader())) as Person; Console.WriteLine("\n After deserializing...\n"); Console.WriteLine(ssortingng.Format("Age = {0} Name = {1}", p.Age, p.Name)); Console.ReadLine(); } } } 

et voici la sortie entrer la description de l'image ici

(Réponse tardive)

Sérialiser:

 var doc = new XDocument(); var xmlSerializer = new XmlSerializer(typeof(MyClass)); using (var writer = doc.CreateWriter()) { xmlSerializer.Serialize(writer, obj); } // now you can use `doc`(XDocument) or `doc.Root` (XElement) 

Désérialiser:

 MyClass obj; using(var reader = doc.CreateReader()) { obj = (MyClass)xmlSerializer.Deserialize(reader); } 

ToXelement sans problèmes d’parsing de code, même réponse qu’Abdul Munim mais correction des problèmes de CA (sauf pour CA1004, cela ne peut pas être résolu dans ce cas et est par conception)

  public static XElement ToXElement(this object value) { MemoryStream memoryStream = null; try { memoryStream = new MemoryStream(); using (TextWriter streamWriter = new StreamWriter(memoryStream)) { memoryStream = null; var xmlSerializer = new XmlSerializer(typeof(T)); xmlSerializer.Serialize(streamWriter, value); return XElement.Parse(Encoding.ASCII.GetSsortingng(memoryStream.ToArray())); } } finally { if (memoryStream != null) { memoryStream.Dispose(); } } } 

Qu’en est-il de

 public static byte[] BinarySerialize(Object obj) { byte[] serializedObject; MemoryStream ms = new MemoryStream(); BinaryFormatter b = new BinaryFormatter(); try { b.Serialize(ms, obj); ms.Seek(0, 0); serializedObject = ms.ToArray(); ms.Close(); return serializedObject; } catch { throw new SerializationException("Failed to serialize. Reason: "); } }