我认为您所看到的问题是 XML 中一个鲜为人知但非常严重的缺陷。简而言之:xml 值不能包含某些字符,不仅不能在 xml 文本中,甚至不能使用 &#DDDD; 进行转义。符号。
可以在此处找到有效的 XML 字符集:http: //www.w3.org/TR/REC-xml/#charsets,它是:#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]。
这意味着如果您的字符串有任何未包含在此字符集中的字符,则无法将其序列化为 XML 值。存储此类字符串的唯一方法是将其序列化为 base64 作为二进制数据。
许多流行的框架,包括 MSXML 和 .NET,都允许将错误数据放入 XML 值中,然后拒绝反序列化此类 XML。这是一个示例,屏幕截图:http: //vvcap.net/db/Db94W-13uwCkNXSZTitO.htp和源代码:
using System;
using System.Xml.Serialization;
using System.Xml;
[Serializable] public class TestClass
{
[XmlAttribute]
public string Member { get; set; }
}
class Program
{
static void Main(string[] args)
{
var ser = new XmlSerializer(typeof(TestClass));
var tc = new TestClass() { Member = "zzz \x19 zzz" };
var stream = new System.IO.StringWriter();
ser.Serialize(stream, tc);
var xml = stream.ToString();
var stream2 = new System.IO.StringReader(stream.ToString());
var tc2 = ser.Deserialize(stream2);
}
}