【发布时间】:2012-03-19 03:07:03
【问题描述】:
我使用XmlSerializer 来序列化/反序列化一些对象。问题是性能。分析时,使用XmlSerializer 使我们的应用程序启动时间延长 2 秒。我们缓存我们的 XmlSerializer 并重用它们。我们无法使用 sgen.exe,因为我们正在使用 XmlAttributeOverrides 创建 XmlSerializer。
我尝试使用 Json.Net 之类的序列化替代方案,一开始效果很好。问题是我们需要向后兼容,所以所有已经生成的 xml 都需要正确解析。此外,对象序列化输出必须是 Xml。
总结一下:
- 我收到了由 XmlSerializer 序列化的 Xml 数据。
- 我需要反序列化 Xml 数据并将其转换为对象。
- 我需要将对象序列化为 Xml(理想情况下是一种 Xml 格式,就像 XmlSerializer 所做的那样)
【问题讨论】:
-
您的 XML 数据包含开始标记
<UsernameHistory>和结束标记</DatastoreHistory>。我想这是一个打字错误。此外,在您的问题中,您定义了输入数据的格式,但不清楚定义 JSON 输出的格式。就像您可以用不同的 XML 格式表示相同的信息一样,您可以使用等效的信息集生成不同的 JSON 数据,但格式不同。我认为您应该更清楚地定义输出数据的格式。 -
如果您还清除限制“我不能使用 XmlSerializer”会很好。如果只是性能的原因,那么有很多方法可以提高性能,使用sgen.exe或者实现
ISerializable接口。问题中最不清楚的是:为什么如果数据输入格式如此奇怪。您有一个长的 XML 文件还是有很多这样的文件?通常一个人在数据库中有原始信息。那么为什么你需要这么奇怪的 XML 输入而不是访问 original 数据呢? -
我更新了我的问题以更多地代表问题
-
这只是 XmlSerializer 的启动时间问题吗?正如 Oleg 所说,如果使用得当,序列化/反序列化时间可能会非常快(已编译),例如,如果调用了良好的构造函数等。
-
是的,它只是在启动时,因为在启动时我们正在反序列化我们的对象。构建 XmlSerializer 需要时间。之后,速度很快,但我们需要改进启动时间。
标签: c# xml serialization json.net