2013-04-05 1 views
0

Я создал тип с System.Reflection.Emit следующими MSDN docSerialize время выполнения создана тип

Я создаю мой тип и экземпляр с этим кодом:

//following the tutorial I created a method which returns a dynamic type 
Type myDynamicType = CreateNewObject("MyDynamicType", fields); 
var instance = Activator.CreateInstance(myDynamicType); 

теперь я хочу, чтобы seralize моего объекта с XmlSerializer

попытался это:

FileStream fs = new FileStream(@"C:\Test\SerializedDynamic.XML", FileMode.Create);    
XmlSerializer xs = new XmlSerializer(typeof(object)); 
xs.Serialize(fs, instance); 

, но он выдает исключение:

"The type MyDynamicType was not expected. Use the XmlInclude or SoapInclude attribute to specify types that are not known statically." 

Любая помощь?

+0

вы пробовали литья ?, или это http://msdn.microsoft.com/en-gb/library/e5aakyae.aspx – Sayse

+0

Что произойдет, если вы выполните: 'XmlSerializer xs = new XmlSerializer (myDynamicType);'? –

+0

Можете ли вы сделать то, что он говорит вам делать? Можно ли добавлять атрибуты к вашему динамическому типу? В основном '[XmlInclude]', который должен указывать, какой тип данных он есть. Однако я думаю, что проблема действительно в том, что нашел @JonEgerton - вам нужно предоставить тип для сериализатора (также можно попробовать «новый XmlSerializer (instance.GetType()), если вы передаете экземпляр в качестве параметра в метод, который выполняет сериализацию) – Sinatr

ответ

3

Расширение на комментарий:

Я думаю, что проблема в том, что вы создаете XmlSerializer с typeof(object).

Если вы используете одно из следующих действий он должен работать:

XmlSerializer xs = new XmlSerializer(myDynamicType); 
XmlSerializer xs = new XmlSerializer(instance.GetType());