2013-02-28 3 views
0

Это является продолжением вопроса:Ошибка сериализации унаследованного свойства в .NET 4.5

Serialization breaks in .NET 4.5

У меня есть свойство в унаследованном коде, который вызывает у меня горе в сериализации на .NET 4.5.

Это свойство:

[EditorBrowsable(EditorBrowsableState.Never), Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
    private new object Value 
    { 
     get 
     { 
      return base.Value; 
     } 
     set 
     { 
      base.Value = value; 
     } 
    } 

Который был, вероятно, введены, чтобы попытаться скрыть свойство «Value» базового класса. Единственным решением, которое работало до сих пор, было , пусть сериализатор знает, что я хочу сериализовать в .NET4. Но это проблема для меня. (Эта конфигурация должна быть установлена ​​только в том случае, если на компьютере с трассировкой установлен .NET 4.5, в противном случае возникает исключение).

Я думаю, что я могу удалить свойство все вместе, но поскольку я имею дело с большой и сложной системой устаревания, я не уверен, какими могут быть побочные эффекты.

Так что мой quesion двояка:

  1. Почему inhertied брейки свойство .NET 4.5 сериализации?

  2. Какие неприятные побочные эффекты следует ожидать, если я удалю унаследованное свойство?

ответ

1

Как ответил Юсеф на related post:

В 4.5, реализация XmlSerializer был заменен на тот, который не зависит от компилятора С #. Хотя он обеспечивает лучшую производительность и стабильность при запуске, вы можете столкнуться с проблемой совместимости между реализациями.

Настройка конфигурации для использования legacySerializer не работает на 4.0 машинах, так как соответствующий строго типизированный класс раздела Xml config не содержит заполнитель для этого параметра.

Оба вопроса будут рассмотрены в предстоящем обновлении. До тех пор вы можете обойти проблему, установив переключатель конфигурации в 4.5 при удалении коммутатора 4.0.

+0

спасибо. если я изменю тип компиляции 4.5, будет ли это работать? потому что в этом случае флаг устаревшего seiraliztion не поможет, так как это скомпилировано в 4.5 no 4.0 –

+0

Этот коммутатор работает хорошо, если вы используете целевое приложение 4.5/4.0 в среде выполнения 4.5. Но коммутатор выходит из строя, если вы запускаете целевое приложение 4.0 на чистую машину 4.0. Но вам не нужен этот конфигурационный переключатель, если вы запускаете приложение в чистом режиме 4.0, так как ваш десериализатор уже работает отлично. Таким образом, вам просто нужно условно установить этот конфигурационный переключатель на основе того, какое время работы имеет ваша машина. – Praburaj

Смежные вопросы