Мне нужно построить набор динамически созданных узлов XML из объектов в следующем формате:
<Root>
<Name>My Name</Name>
<DynamicValues>
<DynamicValue1>Value 1</DynamicValue1>
<DynamicValue2>Value 2</DynamicValue2>
</DynamicValues>
</Root>
Имя узлов в DynamicValues
-tag неизвестно заранее. Моя первоначальная мысль заключалась в том, что это должно быть возможно с помощью 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. "
Любые идеи, как я могу это достичь?