使用特殊字符快速反序列化 XML 的方法
我正在寻找快速反序列化 xml 的方法,其中包含特殊字符,如 ö。
我正在使用 XMLReader,但它无法反序列化此类字符。
有什么建议吗?
编辑:我正在使用 C#。 代码如下:
XElement element =.. //has the xml
XmlSerializer serializer = new XmlSerializer(typeof(MyType));
XmlReader reader = element.CreateReader();
Object o= serializer.Deserialize(reader);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我猜您遇到了编码问题,而不是在 中
XMLReader
但使用XmlSerializer
。您可以使用
XmlTextWriter
和XmlSerializer
就像下面的代码片段一样(请参阅下面的通用方法以获得更好的实现方式)。与元音变音 (äöü) 和其他特殊字符配合得很好。我个人使用以下通用方法来序列化和反序列化 XML 和对象,并且尚未遇到任何性能或编码问题。
I'd guess you're having an encoding issue, not in the
XMLReader
but with theXmlSerializer
.You could use the
XmlTextWriter
and UTF8 encoding with theXmlSerializer
like in the following snippet (see the generic methods below for a way nicer implementation of it). Works just fine with umlauts (äöü) and other special characters.I personally use the follwing generic methods to serialize and deserialize XML and objects and haven't had any performance or encoding issues yet.
对我有用的方法类似于@martin-buberl 的建议:
What works for me is similar to what @martin-buberl suggested:
最简单的方法是将字符从任何编码转换为 Base64 编码。 Base64 可转换可打印字符列表中的任何字符串,从而无需执行“5000 次转换”。
将要序列化的类的字符串必须转换为 Base64 字符串。必须启动 MemoryStream 对象才能操作内存中序列化过程的二进制信息。然后,必须创建 XmlSerializer 对象以使用 Serialize() 方法序列化该对象。 MemoryStream 对象必须作为参数传递,以便 XmlSerializer 能够操作内存中的数据。序列化完成后,可以通过调用ToArray()方法从MemoryStream的二进制数据中提取序列化后的对象,得到MemoryStream内的所有二进制信息作为字节数组。
The simplest way of doing this is to transform the characters from any encoding to the Base64 encoding. The Base64 transforms any string in a list of printable characters, thus removing the need to do "5000 conversions".
The strings of the class that will be serialised must be converted to Base64 strings. A MemoryStream object must be initiated in order to manipulate the binary information of the serialisation process in memory. Then, an XmlSerializer object must be created to serialise the object using the Serialize() method. The MemoryStream object must be passed as a parameter in order for the XmlSerializer to manipulate the data in memory. After the serialisation is finished, the serialised object can be extracted from the binary data of the MemoryStream by calling the ToArray() method to get all the binary information within the MemoryStream as a byte array.