假设这样的 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
as public object FieldComplex
(i.e. 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
as 对象会将这些属性插入到<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 映射到同一个类。从它的角度来看,内容只是字符串,但序列化/反序列化当然不一样:(