XmlSerializer和表情符号

时间:2017-03-22 12:05:05

标签: c# xml-serialization

XmlSerializer很难(或不会)反序列化包含表情符号字符的内容,例如��。我已经读过这些字符在XML标准中实际上是非法的;但是,如果我想忠实地代表包括表情符号的聊天对话,则需要它们。如何反序列化并获取仅包含这些字符的字符串?

(稍后我将不得不处理这些字符,但让我们从(de)序列化开始:))

1 个答案:

答案 0 :(得分:2)

你可以这样做。第一个测试类:

[XmlRoot("root")]
public class Test {
    [XmlElement("data")]
    public string Root { get; set; }
}

然后:

var test = "<root><data>&#55357;&#56877;</data></root>";
var s = new XmlSerializer(typeof(Test));
using (var reader = new StringReader(test)) {
    using (var xmlReader = XmlReader.Create(reader, new XmlReaderSettings() {
       CheckCharacters = false // key part
    })) {
        var obj = s.Deserialize(xmlReader);
    }
}

CheckCharacters = false与xml阅读器一起使用将阻止它检查是否有任何字符超出了合法的XML字符范围。