C # десериализовать текст в смешанном XML-контенте как пользовательский объект? - PullRequest
3 голосов
/ 11 сентября 2011

Возможно ли иметь XML, один из элементов которого имеет смешанное содержимое, и десериализовать текст в смешанном элементе как пользовательский объект, а не как string?

Я пробовал это:

    [XmlText(typeof(textType))]
    [XmlElement("query", typeof(templateBodyQuery))]
    [XmlElement("expand", typeof(expandType))]
    [XmlElement("insert", typeof(expandTypeInsert))]
    public object[] Items { get; set; }

Ожидается, что текстовые элементы будут сериализованы как textType, но я получаю ошибку 'textType' cannot be used as 'xml text'.

Это мой textType класс:

public class textType
{
    [XmlText]
    public string Value { get; set; }
}

1 Ответ

0 голосов
/ 19 декабря 2014

Вы не можете использовать не примитивные типы для XmlText. Также я не уверен, что понимаю, как будет структурирован этот xml, поскольку у вас не может быть XmlText и XmlElements в одном узле.

Я думаю, это то, что вы пытаетесь сделать:

[XmlElement("textType",typeof(textType))]
[XmlElement("query", typeof(templateBodyQuery))]
[XmlElement("expand", typeof(expandType))]
[XmlElement("insert", typeof(expandTypeInsert))]
public object[] Items { get; set; }

, который десериализует:

<Test>
    <textType>example</textType>
    <query>...</query>
    <expand>...</expand>
</Test>

Для класса Test, который имеет объект textType в начале массива Items с Value из "example"

...