C # XML строковый элемент с атрибутом Name - PullRequest
5 голосов
/ 18 января 2010

Я пытаюсь создать объект c # для сериализации / десериализации со строковым свойством. Свойство должно генерировать элемент, а также иметь атрибут:

например:

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

Если свойство является строкой, я не вижу, как добавить атрибут, и если комментарий является объектом со свойствами «Имя» и «Значение», он генерирует:

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

Есть идеи?

1 Ответ

6 голосов
/ 18 января 2010

Вам нужно будет предоставить эти 2 свойства для типа и использовать атрибут [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. .

...