Я использую метод сериализации/десериализации. Класс BinaryFormatter. Каждый раз, когда создается новая сборка, BinaryFormatter не может десериализовать двоичные данные, даже если структура классов одинакова, но версия сборки отличается. Можно ли десериализовать двоичный буфер без проверки версии сборки, если структура классов остается неизменной?Монтаж Независимая сериализация в .NET
ответ
Попробуйте это:
public sealed class CurrentAssemblyDeserializationBinder : SerializationBinder
{
public override Type BindToType(string assemblyName, string typeName)
{
return Type.GetType(String.Format("{0}, {1}", typeName, Assembly.GetExecutingAssembly().FullName));
}
}
formatter.Binder = new CurrentAssemblyDeserializationBinder();
formatter.Deserialize(inStream);
Тема Poster Добавлено:
Да, это работает. Просто убедитесь, что существуют какие-либо типы System.Generic или других Libs в двоичных данных, тогда вы должны пройти их без изменений. «ResizableControls» - имя старой сборки lib, «EntityLib» - новое имя Ассамблеи. Кроме того, номер версии также должен быть заменен по требованию.
public sealed class CurrentAssemblyDeserializationBinder : SerializationBinder
{
public override Type BindToType(string assemblyName, string typeName)
{
string name;
if (assemblyName.Contains("ResizableControl"))
{
name = Assembly.GetAssembly(typeof(EntityLib.Pattern)).ToString();
}
else
{
name = assemblyName;
}
return Type.GetType(String.Format("{0}, {1}",
typeName.Replace("ResizableControl", "EntityLib"), name));
}
}
Спасибо, это именно то, что мне нужно.
Независимо от того, делает ли десериализационную сборку независимой? –
@Kirk Robb В двоичном форматировании хранится информация о типе в сериализованном объекте, чтобы он знал, к какому типу десериализовать его. Наследуя класс SerializationBinder, можно перенаправить все запросы для типов из двоичного форматирования на типы, содержащиеся в текущей сборке. Дайте мне знать, если это сработает. –
Возможно, использование другой техники сериализации лучше, как сказал Марк Гравелл. Однако ты просто спас мне жизнь. Я использую его в двоичном сокетном соединении, которое очень приятно делать с BinaryFormatter. Спасибо! – Vinzenz
Я думаю, что это проблема с ноу BinaryFormatter - here является возможным решением вы можете контролировать, какой тип загрузки с SerializationBinder - ссылка содержит код и пример того, как использовать это (почти во всех .net languagues)
Спасибо за ответ. Это круто. Существует один «но» - в моем случае структура классов одинакова, сборка отличается, даже версия сборки одинакова, но BinaryFormatter проверяет все детали, такие как «Дата создания файла». И это делает Deserialization отмененным. –
Правильный ответ !!!! Большой! помог мне. – Raymond
Это связано с BinaryFormatter
. Там есть некоторые продвинутые вещи, которые вы можете сделать, чтобы обойти его (с суррогатами и т. Д.), Но это непросто и я честно не рекомендую.
I настоятельно предлагаю вам ознакомиться с договором - сериализатором; например:
XmlSerializer
DataContractSerializer
(но неNetDataContractSerializer
)- Protobuf внутрисетевые
(я склоняюсь к последней, так как она дает гораздо более эффективный выход , и преднамеренно избегает некоторых вопросов, связанных с версией)
Во всех этих случаях хранилище данных не содержит (по крайней мере, с настройками по умолчанию) любое знание типов, за исключением договора, подразумеваемого именами или как указано (обычно в атрибутах).
- 1. . Сериализация .NET.
- 2. .Net Сериализация
- 3. Сериализация System.Drawing.Color в .NET
- 4. Управляемая сериализация в .NET
- 5. Сериализация JSON в .NET
- 6. Xml Сериализация в .NET
- 7. .Net Remoting - Сериализация делегатов
- 8. Сериализация/десериализация Protobuf-net
- 9. Сериализация конфигурации ядра .NET
- 10. потоковая сериализация XML в .net
- 11. Сериализация исключений в .NET 4.5
- 12. Сериализация MsgPack в .Net 2.0
- 13. OutOfMemoryException в ProtoBuf-Net Сериализация
- 14. .NET Сериализация XML в 2009
- 15. Сериализация XML в C# .NET
- 16. Сериализация .NET словарь
- 17. Книга на .Net Сериализация?
- 18. Монтаж Версии
- 19. Монтаж рельсов в ubuntu
- 20. Есть ли UI-независимая точка struct в .NET?
- 21. protobuf-net сериализация без атрибутов
- 22. .net DateTime Сериализация Ошибка десериализации
- 23. .NET A * Оптимизация маршрутизации, сериализация?
- 24. .NET SOAP Сериализация неограниченной последовательности
- 25. protobuf-net: сериализация пустого списка
- 26. Сериализация объекта .NET для JSON
- 27. Пользовательская .NET Сериализация не работает
- 28. .NET Сериализация XML и наследование
- 29. Независимая программа
- 30. Сериализация строки в XML в .NET.
Вы можете переместить класс для десериализации в отдельную сборку? видимо, это не меняется? – mtijn
да, могу. Я ищу способ пропустить проверку версии сборки и сохранить ее на свой страх и риск. –
Посмотрите на мою ссылку – Carsten