Что делает CLR «автоматически», когда аннотируется тип [serializable]? - PullRequest
1 голос
/ 04 марта 2011

Я понимаю, что когда вы аннотируете тип с помощью [serializable], он сообщает CLR, что этот тип может быть сериализован.

Мне не нравится, что это похоже на магию "черного ящика".Я хочу знать, что он делает, когда я отмечаю его этим атрибутом.

Кроме того, было бы полезно узнать, что он делает, когда я на самом деле пытаюсь сериализовать объект.

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

Ответы [ 2 ]

2 голосов
/ 04 марта 2011

Common Language Runtime (CLR) управляет размещением объектов в памяти, а .NET Framework предоставляет механизм автоматической сериализации с использованием отражения. Когда объект сериализуется, имя класса, сборки и всех членов данных экземпляра класса записываются в хранилище. Объекты часто хранят ссылки на другие экземпляры в переменных-членах. Когда класс сериализуется, механизм сериализации отслеживает все ссылочные объекты, уже сериализованные, чтобы гарантировать, что один и тот же объект не сериализуется более одного раза. Архитектура сериализации, предоставляемая .NET Framework, правильно обрабатывает графы объектов и циклические ссылки автоматически. Единственное требование, предъявляемое к графам объектов, заключается в том, что все объекты, на которые ссылается сериализуемый объект, также должны быть помечены как Сериализуемые. Если этого не сделать, то будет выдано исключение, когда сериализатор попытается сериализовать немаркированный объект.

эта часть этой статьи: http://msdn.microsoft.com/en-us/library/ms973893.aspx

1 голос
/ 04 марта 2011

Единственное, что происходит, это то, что typeof(MyClass).IsSerializable будет правдой.Затем в коде есть выражение "1002", которое выполняет фактическую сериализацию.

...