直接反序列化到/从 XML Linq

Posted

技术标签:

【中文标题】直接反序列化到/从 XML Linq【英文标题】:De/Serialize directly To/From XML Linq 【发布时间】:2008-11-24 12:50:35 【问题描述】:

有什么方法可以在不往返 XmlDocument/temp 字符串的情况下对对象进行反序列化/序列化?我正在寻找类似以下的内容:

class Program

    static void Main(string[] args)
    
        XDocument doc = new XDocument();
        MyClass c = new MyClass();
        c.SomeValue = "bar";

        doc.Add(c);

        Console.Write(doc.ToString());
        Console.ReadLine();
    


[XmlRoot(ElementName="test")]
public class MyClass

    [XmlElement(ElementName = "someValue")]
    public string SomeValue  get; set; 

但是,当我这样做时出现错误(不能将非空白字符添加到内容中。)如果我将类包装在元素中,我会看到写入的内容是 ConsoleApplication17.MyClass -所以这个错误是有道理的。

确实有自动反序列化/序列化的扩展方法,但这不是我想要的(这是客户端,但我仍然想要更优化的东西)。

有什么想法吗?

【问题讨论】:

【参考方案1】:

类似this?

    public XDocument Serialize<T>(T source)
    
        XDocument target = new XDocument();
        XmlSerializer s = new XmlSerializer(typeof(T));
        System.Xml.XmlWriter writer = target.CreateWriter();
        s.Serialize(writer, source);
        writer.Close();
        return target;
    

    public void Test1()
    
        MyClass c = new MyClass()  SomeValue = "bar" ;
        XDocument doc = Serialize<MyClass>(c);
        Console.WriteLine(doc.ToString());
    

【讨论】:

以上是关于直接反序列化到/从 XML Linq的主要内容,如果未能解决你的问题,请参考以下文章

如何反序列化 System.Xml.Linq.XElement?

xml序列化与反序列化工具

使用 Jackson 从 XML 到 POJO 的反序列化问题:没有从字符串值反序列化的字符串参数构造函数/工厂方法

Code-Serialization:Xml序列化与Xml反序列化

Xml 反序列化到对象,反射到类型

从 Java 到 XML 的序列化/反序列化的最佳实践