c# - 将对象序列化为 XElement 并在内存中反序列化

标签 c# xml linq serialization c#-4.0

我想将一个对象序列化为 XML,但我不想将它保存在磁盘上。我想将它保存在 XElement 变量中(用于 LINQ),然后反序列化回我的对象​​。

我该怎么做?

最佳答案

您可以使用这两个扩展方法在 XElement 和您的对象之间进行序列化和反序列化。

public static XElement ToXElement<T>(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<T>(this XElement xElement)
{
        var xmlSerializer = new XmlSerializer(typeof(T));
        return (T)xmlSerializer.Deserialize(xElement.CreateReader());
}

用法

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

关于c# - 将对象序列化为 XElement 并在内存中反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8373552/

相关文章:

c# - 图像隐写术

javascript - sinon fakeserver可以发送xml响应吗?

Android textview 在包装时将单词分开

sql-server - SQL Server : select from xml with namespace

LINQ 列表包含另一个列表(连续)

c# - 使用 C# Linq Lambda 将两个对象的字段合并为一个,最好不要使用匿名对象

c# - 代码契约和重载

c# - 你如何在 C# 中连接列表?

c# - Excel 数据读取器问题、列名称和工作表选择

c# - Entity Framework 代码首先在 Controller 中使用上下文