5

我正在尝试使用字符串属性创建用于序列化/反序列化的 ac# 对象。该属性需要生成一个元素并且还具有一个属性:

例如:

...
<Comment Name="CommentName"></Comment>
...

如果属性是字符串,我看不到如何添加属性,如果注释是具有 Name 和 Value 属性的对象,则会生成:

...
<Comment Name="CommentName">
    <Value>comment value</Value>
</Comment>
...

有任何想法吗?

4

1 回答 1

6

您需要在一个类型上公开这两个属性并使用该[XmlText]属性来指示它不应生成额外的元素:

using System;
using System.Xml.Serialization;
public class Comment
{
    [XmlAttribute]
    public string Name { get; set; }
    [XmlText]
    public string Value { get; set; }
}
public class Customer
{
    public int Id { get; set; }
    public Comment Comment { get; set; }
}
static class Program
{
    static void Main()
    {
        Customer cust = new Customer { Id = 1234,
            Comment = new Comment { Name = "abc", Value = "def"}};
        new XmlSerializer(cust.GetType()).Serialize(
            Console.Out, cust);
    }
}

如果要将这些属性展平到对象本身(Customer我的示例中的实例),则需要额外的代码来使对象模型假装适合XmlSerializer想要的东西,或者完全独立的 DTO 模型。

于 2010-01-18T12:24:56.107 回答