XmlSerializer的清理字符串

时间:2016-03-08 09:05:34

标签: c# .net xml serialization xml-serialization

我试图将Xml序列化来自不同来源的大量字符串。

问题是如果字符串包含序列化程序无法处理的字符,则XmlSerializer会抛出异常。

当然我已经完成了基本的字符串规范化,但找到了" bad"人物一次又一次。最新的3个是:'\a', '\0', '\u001f'

有没有办法从字符串中删除所有不支持的字符或让XmlSerializer忽略它们?

我目前的代码是:

public static string CleanupStringForValidXMLExport(this string inputString)
{
    if (!inputString.IsNullOrEmpty())
    {
        //InvalidXMLCharacters
        return inputString.Remove(new[] { '\x1A', '\x1D', '\x0B', '\x01', '\x02', '\x03', '\x04', '\x17', '\x18', '\a', '\0', '\u001f' })
            .RemoveMultipleWhiteSpaces()
            .ReplaceUmlauts()
            .ReplaceSpecialChars();
    }

    return inputString;
}

2 个答案:

答案 0 :(得分:1)

Many characters在XML中被视为无效,即使它们作为实体引用出现(例如#x0)。但是,如果您在XmlReader

中关闭字符检查,则可以安全地阅读它们
new XmlReaderSettings { CheckCharacters = false };

请注意,这会关闭实体的字符检查,而不会关闭无效的普通字符,但您可以将它们转换为预处理方法中的实体,以便保留所有内容。

答案 1 :(得分:0)

尝试此操作以删除无效的xml字符

view()->shar