C#中的XmlElement

时间:2013-01-15 21:55:04

标签: c# xmlserializer

我在C#中有一个简单的类,我已经设置了使用XmlSerializer类序列化为XML。

[Serializable, XmlRoot("dc", Namespace= dc.NS_DC)]
public class DCItem {

    // books??

    [XmlElement("title")]
    public string Title { get; set; }

}

DCItem序列化很好,因为代码现在正在设置(如上所示);但是,我想更改属性“Title”,以便它包含在“Books”节点中。例如:

<dc>
  <books>
    <title>Joe's Place</title>
  </books>
</dc>

这样做最好的方法是什么?

3 个答案:

答案 0 :(得分:5)

您可以定义Books类:

public class Books
{
    [XmlElement("title")]
    public string Title { get; set; }
}

然后:

[XmlRoot("dc", Namespace= dc.NS_DC)]
public class DCItem 
{
    [XmlElement("books")]
    public Books Books { get; set; }
}

另请注意,我已经摆脱了二进制序列化程序使用的Serializable属性,并被XmlSerializer类完全忽略。

现在因为我怀疑你可以拥有多本书:

<dc>
  <books>
    <title>Joe's Place</title>
    <title>second book</title>
    <title>third book</title>
  </books>
</dc>

您可以调整对象模型以匹配此结构:

[XmlRoot("dc", Namespace= dc.NS_DC)]
public class DCItem
{
    [XmlElement("books")]
    public Books Books { get; set; }
}

public class Books
{
    [XmlElement("title")]
    public Book[] Items { get; set; }
}

public class Book
{
    [XmlText]
    public string Title { get; set; }
}

答案 1 :(得分:3)

我假设您需要<title>下的多个<books>。然后这是一种方法:

[XmlType("title")]
public class Title 
{
    [XmlText]
    public string Text { get; set; }
}

[XmlRoot("dc")]
public class DCItem 
{
    [XmlArray("books")]
    public List<Title> Books { get; set; }
}

您可能希望使用<book>元素,并将标题作为属性或元素放在<book>上。

答案 2 :(得分:1)

最简单的方法是制作包含标题属性的图书类。

public class booksType
{
    public string title {get;set;}
}

用作主类中书籍属性的类型。

public booksType books {get;set;}