XmlSerializer 和表情符号

XmlSerializer and emoji

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

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

你可以这样做。第一次测试 class:

[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 reader 一起使用将阻止它检查是否有任何字符超出合法 XML 字符的范围。