【问题标题】:Using XDocument how do I add a serialized/xml representation of a class as an element of XDocument?使用 XDocument 如何将类的序列化/xml 表示添加为 XDocument 的元素?
【发布时间】:2014-08-13 19:11:28
【问题描述】:

我正在尝试将类/对象转换为 XElement 并将其插入到我从基于磁盘的模板加载的 XDocument 中。

        Recipient rec = new Recipient();
        rec.Body_Type = "HTML";
        rec.Email = "Testaddress@gmail.com";
        XDocument myDoc =XDocument.Load("../../MasterTemplate.xml");

       //serialize Recipient to element and add it

        myDoc.Root.Add(element);
        this.richTextBox1.Text =  myDoc.ToString();

我假设我需要以某种方式序列化对象,但不知道具体该怎么做。

【问题讨论】:

    标签: xml linq c#-4.0 linq-to-xml


    【解决方案1】:

    可能的方法(未考虑效率):

    1. 您可以使用序列化器将对象序列化为 XML 字符串,然后使用 XElement.Parse() 将字符串转换为 XElement
    2. 或使用 linq-to-xml 手动创建 XElement

    在其中之一之后,您已准备好将 XElement(s) 插入现有的 XDocument。假设Recipient类是简单的类,只包含两个字符串类型的属性,那么我认为第二种方法更方便,例如:

    XElement element = 
                new XElement("Recipient",
                                 new XElement("Body_Type", rec.Body_Type),
                                 new XElement("Email", rec.Email));
    myDoc.Root.Add(element);
    

    供参考:MSDN: Creating XML Trees in C# (LINQ to XML)

    【讨论】:

      【解决方案2】:

      不知道什么是“元素”会使问题变得更加困难。假设它是一个复杂类型,具有其他属性,例如可以作为“名称”和“值”字符串公开。

      您缺少实例化新的实例化“XElement”,我不确定您是否希望直接添加到根目录。例如:

      myDoc.Root.Add(element)
      

      变成:

      myDoc.Add(new XElement("My Element Name", new XAttribute("My Attribute", element.Name), element.Value));
      

      因此,我通过正确调用“XElement”的添加将元素添加到 xdoc。添加的元素的名称为“我的元素名称”。我决定包含一个名为“我的属性”的 XAttribute,但它是一种元素类型的“名称”。然后包含的文本是元素中的“值”。

      恕我直言,我不喜欢从 XDocument 创建 XML。创建自己的复杂类型,然后使用“System.Xml.Serialization”制作自定义序列化程序比将 xml 添加到 xdocs 的所有复杂规则要好得多。但这也取决于偏好和项目范围。

      【讨论】:

        猜你喜欢
        • 2016-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-14
        • 1970-01-01
        相关资源
        最近更新 更多