Мне нужно построить набор динамически создаваемых 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"
Есть идеи, как этого добиться?