如何使用 XmlSerializer 在 XmlNode 或 XmlElement 中允许自由未编码 html
How to allow free unencoded html in XmlNode or XmlElement using XmlSerializer
我正在寻找一种创建 xml 元素的方法,该元素将接受可能包含 html 元素(或任何其他有效的 xml 元素)的文本字符串可能看起来像这样:
"Test text with <strong>custom nodes</strong> that shouldn't be encoded"
我试过将 XmlAnyElement
与 XmlNode[]
结合使用,但没有成功。
我想要的输出应该是这样的:
<Root>
<Text>
Test text with <strong>custom nodes</strong> that shouldn't be encoded
</Text>
</Root>
为此class:
public class Root
{
// Problematic property
public string Text { get; set; }
}
实现这种行为的最简单方法是什么(部分问题是我的元素可能以纯文本开头 and/or 结尾)?
我发现的简单解决方法是创建一个 XmlElement
助手 属性,它将 return 用 <Text>..</Text>
包裹的字符串作为 XmlElement
使用 XmlDocument
并像这样忽略 Text
属性:
public class Root
{
[XmlIgnore]
public string Text { get; set; }
[XmlAnyElement]
public XmlElement TextElement
{
get
{
var x = new XmlDocument();
x.LoadXml(string.Format("<Text>{0}</Text>", Text));
return x.DocumentElement;
}
set { Text = value.InnerXml; }
}
}
这将接受 Text
下的 任何内容 但请注意,如果 Text
属性 将设置为无效 xml , 序列化将失败。
我正在寻找一种创建 xml 元素的方法,该元素将接受可能包含 html 元素(或任何其他有效的 xml 元素)的文本字符串可能看起来像这样:
"Test text with <strong>custom nodes</strong> that shouldn't be encoded"
我试过将 XmlAnyElement
与 XmlNode[]
结合使用,但没有成功。
我想要的输出应该是这样的:
<Root>
<Text>
Test text with <strong>custom nodes</strong> that shouldn't be encoded
</Text>
</Root>
为此class:
public class Root
{
// Problematic property
public string Text { get; set; }
}
实现这种行为的最简单方法是什么(部分问题是我的元素可能以纯文本开头 and/or 结尾)?
我发现的简单解决方法是创建一个 XmlElement
助手 属性,它将 return 用 <Text>..</Text>
包裹的字符串作为 XmlElement
使用 XmlDocument
并像这样忽略 Text
属性:
public class Root
{
[XmlIgnore]
public string Text { get; set; }
[XmlAnyElement]
public XmlElement TextElement
{
get
{
var x = new XmlDocument();
x.LoadXml(string.Format("<Text>{0}</Text>", Text));
return x.DocumentElement;
}
set { Text = value.InnerXml; }
}
}
这将接受 Text
下的 任何内容 但请注意,如果 Text
属性 将设置为无效 xml , 序列化将失败。