使用XDocument如何将类的序列化/ xml表示添加为XDocument的元素?

时间:2014-08-13 19:11:29

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

我正在尝试将类/对象转换为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();

我认为我需要以某种方式序列化对象,但我不确定如何做到这一点。

2 个答案:

答案 0 :(得分:0)

不知道'元素'使问题更加困难。让我们说它是一个复杂的类型,其他属性可以作为' Name'和'价值'例如。

您缺少实例化新的实例化' XElement'我不确定你是否希望直接添加到根目录。 EG:

myDoc.Root.Add(element)

变为:

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

我正在通过正确调用添加' XElement'来向xdoc添加元素。添加的元素名称为'我的元素名称'。我决定包含一个名为' My Attribute'的XAttribute。但是一个名字'从一种元素。然后包含的文字是' Value'来自元素。

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

答案 1 :(得分:0)

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

  1. 您可以使用序列化程序将对象序列化为XML字符串,然后使用XElement将字符串转换为XElement.Parse()
  2. 或使用linq-to-xml手动创建XElement
  3. 在其中一个之后,您已准备好XElement(s)插入现有的XDocument。假设Recipient类是只包含两个string类型属性的简单类,那么第二种方法在我看来更方便,例如:

    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)