【问题标题】:XmlElement in C#C# 中的 XmlElement
【发布时间】:2013-01-16 06:10:59
【问题描述】:

我在 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>

最好的方法是什么?

【问题讨论】:

  • XML 序列化不需要Serializable 属性!
  • 我很困惑..你只是要求List&lt;Book&gt;,其中BookTitle 属性?

标签: c# xmlserializer


【解决方案1】:

你可以定义一个 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; }
}

【讨论】:

  • 谢谢!这是我想的方向,但我更好奇我是否可以只是懒惰而不必通过创建更多类的努力。
【解决方案2】:

我假设您在&lt;books&gt; 下需要多个&lt;title&gt;。那么这是一种方法:

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

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

您可能希望有一个&lt;book&gt; 元素,并将标题作为属性或元素放在&lt;book&gt; 上。

【讨论】:

    【解决方案3】:

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

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

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

    public booksType books {get;set;}
    

    【讨论】:

    • 不是struct。只需使用class
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多