当字符在CDATA中时,为什么XML序列化程序会抛出无效字符异常?

Joh*_*ika 6 .net c# xml xml-serialization

可能重复:
为什么"控制"字符在XML中是非法的?
在XML文件中保存转义字符0x1b

这会抛出ArgumentException:

    var c = '\x1A';

    var xml = new XDocument(
                new XDeclaration("1.0", "utf-8", null),
                new XElement("test", new XCData(c.ToString()))
            );

    var foo = xml.ToString(); // ArgumentException
Run Code Online (Sandbox Code Playgroud)

为什么.Net会抛出这个异常?我将非法字符包裹在CDATA中,所以我原本以为我会处理非法字符.对于一堆其他字符(例如0x1B,0x1C,0x1E,0x1E,0x1F)也是如此.

你是如何解决这个问题的?

小智 0

我认为 SecurityElement.Escape 不起作用,因为 \x1A 是一个控制代码——没有有效的 xml 实体可以替代。

有关更多详细信息,请参阅此有效 XML 字符列表。