Есть ли способ сериализации xml анонимного типа в .net с использованием C # - PullRequest
3 голосов
/ 16 августа 2010

Есть ли способ сериализации анонимного типа в .net? Обычный XmlSerializer завершается ошибкой, потому что для типа не определен конструктор без параметров; и NetDataContractSeralizer завершается ошибкой, потому что мы не можем пометить атрибут DataContract или Serializable анонимным классом.

Так есть ли какой-нибудь хитрый путь или мы просто не можем этого сделать?

Ответы [ 3 ]

3 голосов
/ 16 августа 2010

Да, можно сериализовать анонимный тип.Самый простой способ, который приходит на ум, - это создать объект-обертку, который реализует ISerializable и использует отражение, чтобы проверить анонимный тип его полей и при необходимости сериализовать их.Это было бы очень некрасиво, но сработало бы.

Однако я думаю, что более важный вопрос

Можно ли десериализовать анонимный тип?

Ответ на этот вопрос "Не вобщий смысл".Анонимные типы являются специфичными для сборки типами.Таким образом, хотя это можно сделать определенным образом для определенного анонимного типа, это невозможно сделать в общем смысле и не для разных сборок, поскольку они являются внутренними.

1 голос
/ 16 августа 2010

Определить «сериализовать». Сериализация подразумевает возможность десериализации позже, и если не будет определенного класса, нечего будет десериализовать от до . Однако, если вы просто хотите, чтобы данные помещались в файл XML для последующего извлечения, вы, безусловно, можете это сделать.

Создайте экземпляр вашего XML-документа по своему выбору (XmlDocument, XDocumnet и т. Д.) И постройте его таким образом (вставляя ваши узлы и значения по ходу работы), затем используйте базовый файловый ввод-вывод, чтобы сохранить его где-нибудь. Или, если вы просто пытаетесь передать его между процессами или что-то подобное, передайте его как MemoryStream или Byte[]

0 голосов
/ 16 августа 2010

Только в очень общем смысле, в том, что ничто не мешает вам создавать XML, представляющий объект, и ничто не мешает вам создавать объект, состояние которого отражает некоторый XML.

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

...