Как добавить подэлемент XML в простой тип данных в C # - PullRequest
1 голос
/ 19 октября 2011

Я пытаюсь сериализовать простой тип данных в XML, но определенным образом, чтобы удовлетворить существующий API. (предположим, что нужный XML должен быть сформирован таким образом)

Вот нужный XML:

<foo>
<value>derp</value>
</foo>

В идеале я хотел бы представить это в классе как просто

String foo;

Мне известны только два варианта:

  1. Простая сериализация, которая, конечно, просто приводит к
    <foo>derp</foo>
  1. создание класса Foo, который создает желаемый XML, но заставляет пользователя набирать
    myFoo.Value = "derp";

вместо предпочтительного

foo = "derp";

Есть ли способ иметь простую строку в классе, но представить ее с помощью подэлемента <value>?

1 Ответ

5 голосов
/ 19 октября 2011

Используйте эту реализацию:

[XmlRoot("foo")]
public class Foo
{
    [XmlElement("value")]
    public string Value { get; set; }

    public static implicit operator Foo(string s)
    {
        return new Foo { Value = s };
    }
}

Использование:

private static void Main()
{
    Foo foo = "abc";

    var ns = new XmlSerializerNamespaces();
    ns.Add(string.Empty, string.Empty);

    var serialzier = new XmlSerializer(typeof(Foo));

    using (var writer = new StringWriter())
    {
        serialzier.Serialize(writer, foo, ns);

        Console.WriteLine(writer.ToString());
    }
}

Вывод:

<?xml version="1.0" encoding="utf-16"?>
<foo>
  <value>abc</value>
</foo>
...