2016-03-17 2 views
-1

В нашем приложении, которое поддерживается в течение многих лет, мы используем сериализацию BinaryFormatter больших объектов данных, содержащих множество коллекций и круговых ссылок. Сериализация берет почти навсегда (~ 20 секунд) и занимает большую часть использования ЦП. Я хотел бы переключиться с этого типа сериализации на что-то лучшее и легкое, но без изменения кода, так как времени было мало.Переключение с BinaryFormatter сериализации без значительных изменений: большие данные и круговые ссылки

Я пробовал много решений, но некоторые из них нуждается:

  • класс декорирования или слишком много изменений в коде (например, ProtoBuf);
  • не допускает круговых ссылок (например, MsgPack);

Есть ли способ плавно переключаться на другой и улучшать сериализатор без боли и улучшать процесс сериализации?

ответ

-1

Проведя некоторые исследования и проведя день на реализацию доступных решений, я пойду с Json.NET.

Мне не нужно было много менять, чтобы переключиться с BinaryFormatter, даже атрибуты serializer для объектов не изменяются. Он работает быстрее (~ 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); 
    } 
} 
Смежные вопросы