c# - XmlSerializer 和表情符号

标签 c# xml-serialization

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

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

最佳答案

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

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

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

关于c# - XmlSerializer 和表情符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42951144/

相关文章:

.net - 为什么不能在 C# 中对字典对象进行 XmlSerialized?

c# - 如何在 VS 2015 RC 中将控制台应用程序(.NET 核心 5)发布为单个 EXE 文件?

c# - 连接到 AWS Managed Cassandra Service (MCS)

C#内存/对象理解

java - 在 xml 日志文件中记录 xml 数据

c# - 未为嵌套元素生成 xmlns 属性

c# - ASP.Net Cookie 未保存到浏览器

c# - 该构建还原了 NuGet 包。再次构建项目以将这些包包含在构建中

c# - XML 列表序列化

c# - 使用 RestSharp 序列化列表中的对象