Для оптимизации производительности XmlSerializer
(и XmlSerializerFactory
) генерируют временную сборку, содержащую сериализатор для определенных типов.Тип, который вы упомянули (Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializerContract
), взят из этих сгенерированных сборок (см. http://treyhutcheson.wordpress.com/2007/02/20/dynamic-interface-implementations/)), поэтому вполне естественно, что вы не нашли никакой документации для этого.
Честно говоря, чтобымне кажется, что это какое-то хакерское решение, возможно, для обхода проблем утечки памяти связанных с XmlSerializer - если не используются конкретные конструкторы, XmlSerializer будет продолжать генерировать больше динамических сборок и, таким образом, увеличивать объем занимаемой памяти.1010 * MSDN на том же:
Динамически генерируемые сборки
Чтобы повысить производительность, инфраструктура сериализации XML динамически генерирует сборки для сериализации и десериализации указанных типов. Инфраструктура находит иповторно использует эти сборки. Это происходит только при использовании следующих конструкторов:
XmlSerializer.XmlSerializer (Type)
XmlSerializer.XmlSerializer (Type, String)
Если вы используете какой-либоиз других конструкторов, несколько версий тОдна и та же сборка генерируется и никогда не выгружается, что приводит к утечке памяти и снижению производительности.Самое простое решение - использовать один из двух упомянутых ранее конструкторов.В противном случае вы должны кэшировать сборки в Hashtable, как показано в следующем примере.
Я бы посоветовал выяснить фактическую причину использования недокументированного кода из сгенерированной сборки от заинтересованных разработчиков, нонезависимо от того, готовитесь ли вы отойти от одного и того же, используя XmlSerializer
/ XmlSerializerFactory
- вы всегда можете использовать собственное решение для кэширования, если это необходимо (если вы не используете эти два конкретных конструктора).Не забудьте тщательно проверить свой код.