使用XML序列化的自定义编码

本文关键字:自定义 编码 序列化 XML 使用 | 更新日期: 2023-09-27 18:13:21

我正在做一个项目,我们将一个类序列化为XML字符串。要求声明编码应该是UTF-8,但是他们希望ASCII值> 127的字符被十进制编码。另外,他们不需要实体编码(& <等等);他们希望这些字符也是十进制编码。>

目前,我们正在进行标准的UTF-8编码,并在将特殊字符放入对象中时对其进行"预编码"。这意味着,当我们序列化时,任何来自该编码的&符号都将被编码,因此我们有一个额外的步骤来撤销该编码。

我找到了一种方法来创建一个编码类,它继承了encoding并覆盖了GetBytes方法。当我单独运行它时,它工作得很好,但是当我在XmlWriterSettings中使用它时,它不会调用我覆盖的方法。相反,我得到一个501错误,异常消息是"没有数据可用于编码0"。有关定义自定义编码的信息,请参阅encoding的文档。RegisterProvider方法。"编码文档。RegisterProvider说它从。net 4.6开始可用,但我使用的是4.5.2。

是否有一种方法重写编码,以便我可以手动编码属性和元素值?

使用XML序列化的自定义编码

我想出了一个解决办法。我创建了一个继承xmltextwwriter的类,并覆盖了WriteString方法,以便在将字符串写入流之前通过我创建的Encoding类运行字符串。这就得到了我需要的十进制编码。不幸的是,来自十进制编码的&符号被编码(&变成&#38;),所以我必须使用Replace将其更改回来。除此之外,它以我想要的方式进行编码。我已经把它展示给了我的团队和架构师,所以我们看看他们怎么说。