C#中的XmlElement

Jag*_*agd 4 c# xmlserializer

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

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

    // books??

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

}
Run Code Online (Sandbox Code Playgroud)

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

<dc>
  <books>
    <title>Joe's Place</title>
  </books>
</dc>
Run Code Online (Sandbox Code Playgroud)

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

Dar*_*rov 5

您可以定义Books类:

public class Books
{
    [XmlElement("title")]
    public string Title { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后:

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

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

既然我怀疑你可以有多本书:

<dc>
  <books>
    <title>Joe's Place</title>
    <title>second book</title>
    <title>third book</title>
  </books>
</dc>
Run Code Online (Sandbox Code Playgroud)

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

[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; }
}
Run Code Online (Sandbox Code Playgroud)