在我们维护多年的应用程序中,我们使用包含大量集合和循环引用的大数据对象的BinaryFormatter序列化。序列化几乎永远(约20秒)并占用大量CPU。我想从这种类型的序列化切换到更好和更轻的状态但不会更改代码,因为没有太多时间给出。
我尝试了很多解决方案,但有些解决方案需要:
有没有办法顺利切换到另一个更好的序列化程序,没有痛苦,并改善序列化过程?
答案 0 :(得分:-1)
在做了一些研究并花了一天时间来实施可用的解决方案之后 - 我会选择Json.NET。
我没有太多改变来切换BinaryFormatter,甚至对象的序列化程序属性也没有改变。它的运行速度更快(对象大小相同,约为2秒),一切似乎都能正常工作。
要传递循环引用和其他错误,我必须配置序列化程序:
JsonSerializer serializer = new JsonSerializer();
serializer.Converters.Add(new JavaScriptDateTimeConverter());
serializer.NullValueHandling = NullValueHandling.Ignore;
serializer.ReferenceLoopHandling = ReferenceLoopHandling.Serialize;
serializer.PreserveReferencesHandling = PreserveReferencesHandling.Objects;
using (StreamWriter sw = new StreamWriter(fileName))
{
using (JsonWriter writer = new JsonTextWriter(sw))
{
serializer.Serialize(writer, dbObject);
}
}