Предполагая, что XML такой:
<my:Root xmlns:my="http://foo/bar">
<my:FieldBasic>content</my:FieldBasic>
<my:FieldComplex>
<html xml:space="preserve" xmlns="http://www.w3.org/1999/xhtml">
<div><h1>content</h1></div>
</html>
</my:FieldComplex>
<my:Root>
и класс вроде:
[Serializable]
[XmlType(AnonymousType = true, Namespace = "http://foo/bar")]
[XmlRoot(ElementName = "Root", Namespace = "http://foo/bar", IsNullable = false)]
public class MyRoot
{
public string FieldBasic { get; set; }
public string FieldComplex { get; set; }
}
Как мне десериализовать <my:FieldComplex>
в строку в FieldComplex
? Сбой, когда он находит HTML внутри. Я хочу, чтобы это дало мне строку с этим содержанием:
<html xml:space="preserve" xmlns="http://www.w3.org/1999/xhtml">
<div><h1>content</h1></div>
</html>
Если я объявляю FieldComplex
как public object FieldComplex
(т.е. xsd:anyType
), это вроде работает, и я получаю XMLNode[]
, внутри которого я могу использовать.
Но мне нужно, чтобы FieldComplex
имел тип строки для сериализации, так как для сериализации XML не будет содержать HTML, он будет выглядеть так:
<my:Root xmlns:my="http://foo/bar">
<my:FieldBasic>content</my:FieldBasic>
<my:FieldComplex>content</my:FieldComplex>
<my:Root>
Объявление FieldComplex
как объекта, который вставит эти атрибуты в элемент <my:FieldComplex>
:
xmlns:q1="http://www.w3.org/2001/XMLSchema" p3:type="q1:string" xmlns:p3="http://www.w3.org/2001/XMLSchema-instance
и я этого не хочу. Я также не хочу использовать разные классы для сериализации и десериализации.
Итак, возможно ли это?
Короче говоря, , возможно ли иметь этот класс:
public class MyRoot
{
public string FieldBasic { get; set; }
public string FielComplex { get; set; }
}
Сериализуйте к этому:
<my:Root xmlns:my="http://foo/bar">
<my:FieldBasic>content</my:FieldBasic>
<my:FieldComplex>content</my:FieldComplex>
<my:Root>
и десериализовать из этого:
<my:Root xmlns:my="http://foo/bar">
<my:FieldBasic>content</my:FieldBasic>
<my:FieldComplex>
<html xml:space="preserve" xmlns="http://www.w3.org/1999/xhtml">
<div><h1>content</h1></div>
</html>
</my:FieldComplex>
<my:Root>
P.S. Просто чтобы объяснить «почему?». У меня ведьма класса получает сериализацию. Затем сериализованный XML проходит через несколько узлов приложения и в конечном итоге возвращается, но изменяется, как указано выше. Слои выполняют некоторую проверку XML и, имея дополнительные атрибуты или элементы на входе, не проходят проверку и останавливают поток. Я хочу сопоставить возвращаемый XML с тем же классом. Контент - это просто строки с его точки зрения, но, конечно, не то же самое для сериализации / десериализации: (