Если вы имеете в виду BinaryFormatter
, то:
- изменение типа, пространства имен или идентификатора сборки типа нарушит сериализатор, если вы храните экземпляры типа или сам объект
Type
- изменение имен или типов полей для типа приведет к поломке сериализатора, , если вы храните экземпляров этого типа
В обоих случаях есть способы как-то исправить это, перепрыгивая через сложные обручи, но обычно попробовать не стоит. Исходя из моего опыта, BinaryFormatter
просто не является хорошим выбором, за исключением очень специфических сценариев (в частности, RPC между двумя запущенными приложениями, которые по необходимости должны выполнять один и тот же код - такой как изоляция домена приложения), и если ваше намерение общего назначения хранилище , вам обычно лучше использовать что-нибудь еще . В частности, я склоняюсь к protobuf-net (который является «двоичным» в том смысле, что он реализует двоичный формат «буферов протокола») от Google, но я, по общему признанию, предвзят. JSON и XML также являются хорошими вариантами с точки зрения переносимости, хотя они почти всегда имеют больший выход и (немного) более медленную обработку.
Обратите внимание, что большинство сериализаторов при сериализации объекта Type
будут использовать полное имя, поэтому пункт 1 выше будет применяться к большинству, хотя для каждого сериализатора способы меняются что может существовать. Честно говоря, я бы сказал, что если вы сериализуете Type
экземпляр, вы делаете что-то не так , и было бы лучше сделать это как поиск с ручным ключом по отношению к некоторой внешней ссылке (который может быть через атрибут типа, например). Например:
[SomeMarker("abc")]
class OneOfMyOwnClasses {...}
затем используйте отражение, чтобы получить экземпляр SomeMarkerAttribute
(в некотором кэшированном виде), так что вы на самом деле сохраните:
Type type = ...
string key = GetMarkerFromType(type); // "abc"
Dictionary<string, int> TypeInformation;
TypeInformation[key] = 42;