4

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

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

    // books??

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

}

DCItem 序列化很好,因为现在设置了代码(如上所示);但是,我想更改属性“标题”,使其包含在“书籍”节点中。例如:

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

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

4

3 回答 3

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; }
}
于 2013-01-15T21:58:19.420 回答
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>.

于 2013-01-15T21:59:18.860 回答
1

最简单的方法是创建一个包含标题属性的书籍类。

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

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

public booksType books {get;set;}
于 2013-01-15T21:58:47.223 回答