XML Serialize dynamic object

Мне нужно построить набор динамически создаваемых XML узлов из объектов следующего формата:


    My Name
    
        Value 1
        Value 2
    

Имя узлов в пределах тега DynamicValues-тега заранее неизвестно. Моя первоначальная мысль заключалась в том, что это должно быть возможно с помощью Expando Object, например:

[DataContract]
public class Root
{
    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public dynamic DynamicValues { get; set; }
}

инициализируя его значениями:

var root = new Root
                    {
                        Name = "My Name",
                        DynamicValues = new ExpandoObject()
                    };

root.DynamicValues.DynamicValue1 = "Value 1";
root.DynamicValues.DynamicValue2 = "Value 2";

и затем Xml-сериализуя его:

string xmlString;

var serializer = new DataContractSerializer(root.GetType());
using (var backing = new StringWriter())
using (var writer = new XmlTextWriter(backing))
{
    serializer.WriteObject(writer, root);
    xmlString = backing.ToString();
}

Однако, когда я запускаю это, я получаю SerializationException, говорящий:

"Тип 'System.Dynamic.ExpandoObject' с именем контракта на передачу данных ArrayOfKeyValueOfstringanyType:http://schemas.microsoft.com/2003/10/Serialization/Arrays'. не ожидается. Рассмотрим возможность использования резольвера DataContractResolver или добавим любой типы, не известные статически к списку известных типов - например, используя атрибут KnownTypeAttribute или добавляя их к список известных типов, переданных в DataContractSerializer"

Есть идеи, как этого добиться?

19
задан casperOne 21 September 2011 в 14:59
поделиться