Serialize an object to XElement and Deserialize it in memory

后端 未结 5 1524
旧巷少年郎
旧巷少年郎 2020-12-04 13:15

I want to serialize an object to XML, but I don\'t want to save it on the disk. I want to hold it in a XElement variable (for using with LINQ), and then Deserialize back to

5条回答
  •  有刺的猬
    2020-12-04 13:36

    You can use these two extension methods to serialize and deserialize between XElement and your 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.GetString(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();
    

提交回复
热议问题