Когда вы сериализуете и десериализуете объект, десериализация создаст базу экземпляров на основе сериализованных данных.Это, конечно, не тот же экземпляр, что и первоначальный, что кажется довольно логичным.В конце концов, у вас есть следующий процесс:
- У вас есть экземпляр объекта
- Вы создаете экземпляр строки, который является представлением этого экземпляра объекта
- Вы создаетеэкземпляр объекта, основанный на сериализованных данных в строке
Если учесть, что исходный экземпляр мог мутировать, что десериализация может произойти в другом процессе, даже на другом компьютере, он становится довольноЯсно, что десериализация не может вернуть исходный экземпляр.
В этом конкретном случае, когда объект является String
, вы можете представить, что интернирование строк заставит систему повторно использовать старый экземпляр (если десериализацияпроизошло в том же AppDomain).Но это, вероятно, * потребовало бы DataContractJsonSerializer
, чтобы знать об этом, что сделало бы его излишне сложным.
*) На самом деле я не совсем уверен, точно какая частьсистема, которая заботится о интернировании строк.