Сериализация CodeDom как XML - PullRequest
3 голосов
/ 28 мая 2009

Есть ли способ сериализации объекта CodeCompileUnit как XML.

Проблема в том, что:

XmlSerializer xml = new XmlSerializer( typeof(CodeCompileUnit) );

выдает следующее исключение:

"Невозможно сериализовать член System.CodeDom.CodeObject.UserData типа System.Collections.IDictionary, поскольку он реализует IDictionary."

Ответы [ 3 ]

3 голосов
/ 28 мая 2009

XmlSerializer имеет проблем с IDictionary. Теперь он устарел в пользу DataContractSerializer , который может сериализовать экземпляр CodeCompileUnit:

var serializer = new DataContractSerializer(typeof(CodeCompileUnit));
serializer.WriteObject(Console.OpenStandardOutput(), new CodeCompileUnit());
1 голос
/ 28 мая 2009

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

Этот проект позволяет переходить от кода к кодам и обратно.

http://www.codeproject.com/KB/cs/codedom_assistant.aspx

1 голос
/ 28 мая 2009

Это ограничение сериализатора XML: словари не могут быть сериализованы (хотя я не вижу веских причин для этого). На самом деле их можно сериализовать, если они реализуют IXmlSerializable (что, кстати, очень сложно реализовать), но это не относится к свойству UserData ... так что вы застряли

...