什么决定了Xml序列化中使用的编码?

时间:2009-07-24 17:07:36

标签: .net-2.0 xml-serialization

我目前正在使用XMLSerializer序列化对象,结果XML以:

开头
<?xml version="1.0" encoding="utf-16"?>

我想摆脱它,因为在这种特殊情况下我不需要它(我将只使用序列化字符串以后用我自己的代码反序列化,所以我可以在以后需要时重新添加它)。

我也试图尽快做到这一点,因为我们将对这些序列化进行处理。

所以问题是,我能指望这个签名总是完全一样吗? (如果,我可以删除结果字符串的前39个字符,然后在反序列化时添加完全相同的字符串吗?)

或者可以使编码有所不同,例如?

由于

3 个答案:

答案 0 :(得分:2)

您的问题的答案在于您未向我们展示的代码 - 您是如何进行序列化的。您可能已序列化为StringWriter,或直接序列化为StringBuilder。 .NET中的字符串是UTF-16。如果你序列化为一个字符串,你别无选择,只能获得UTF-16编码。

在其他情况下,编码由目的地决定。如果序列化为某种TextWriter,则将使用TextWriter的编码,除非被覆盖。如果序列化为XmlWriter,则XmlWriterSettings将确定使用的编码。

除非您是XML专家,否则我建议您单独保留签名。 .NET XML API理解XML的规则。除非你也理解它们,否则我建议你留给专家。

答案 1 :(得分:0)

不,你不能假设XML声明总是与可以使用的各种编码(除其他之外)相同。

在使用之前,最好不要以这种方式破坏XML字符串。

答案 2 :(得分:0)

您的速度提升究竟应该来自于此优化?您确定删除并在字符串中添加39个字符会比序列化额外的39个字符更快吗? (我的论点是,它不会。)