C# XmlSerializer和表情符号

C# XmlSerializer和表情符号,c#,xml-serialization,C#,Xml Serialization,XmlSerializer很难(=不)反序列化包含表情符号的内容,例如��。我读到过这样的字符在XML标准中实际上是非法的;但是,如果我想忠实地表示包含表情符号的聊天对话,就需要它们。如何反序列化并获取仅包含这些字符的字符串 (稍后我将不得不处理这些字符,但让我们从(反)序列化它们开始:)您可以这样做。第一级考试: [XmlRoot("root")] public class Test { [XmlElement("data")] public stri

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


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

您可以这样做。第一级考试:

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

var测试=“�;�;”;
var s=新的XmlSerializer(typeof(Test));
使用(变量读取器=新的StringReader(测试)){
使用(var xmlReader=xmlReader.Create(reader,new XmlReaderSettings()){
CheckCharacters=false//关键部分
})) {
var obj=s.Deserialize(xmlReader);
}
}
CheckCharacters=false
与xml reader一起使用将阻止它检查任何字符是否超出合法xml字符的范围

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);
    }
}