Сериализация XML с помощью XML-строки - PullRequest
6 голосов
/ 12 января 2012

Я должен произвести следующий XML

<object>
    <stuff>
        <body>
            <random>This could be any rondom piece of unknown xml</random>
        </body>
    </stuff>
</object>

Я сопоставил это с классом со свойством body типа string.

Если я установлю тело в строковое значение: "<random>This could be any rondom piece of unknown xml</random>"

Строка кодируется во время сериализации. Как я могу не кодировать строку, чтобы она была записана в виде необработанного XML?

Я также хочу иметь возможность десериализовать это.

1 Ответ

6 голосов
/ 12 января 2012

XmlSerializer просто не будет доверять вам производить действительный xml из string.Если вы хотите, чтобы участник был ad-hoc xml, это должно быть что-то вроде XmlElement.Например:

[XmlElement("body")]
public XmlElement Body {get;set;}

с Body и XmlElement с именем random с InnerText из "This could be any rondom piece of unknown xml" будет работать.


[XmlRoot("object")]
public class Outer
{
    [XmlElement("stuff")]
    public Inner Inner { get; set; }
}
public class Inner
{
    [XmlElement("body")]
    public XmlElement Body { get; set; }
}

static class Program
{
    static void Main()
    {
        var doc = new XmlDocument();
        doc.LoadXml(
           "<random>This could be any rondom piece of unknown xml</random>");
        var obj = new Outer {Inner = new Inner { Body = doc.DocumentElement }};

        new XmlSerializer(obj.GetType()).Serialize(Console.Out, obj);
    }
}
...