我需要從以下格式的對象構造一組動態創建的XML節點: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的的 列表例如, 」
任何想法我怎麼能做到這一點
它確實沒有序列化拋出異常,但不進我的預期(見問題例如XML)。我得到'KeyValueOfstringanyType'類型的節點。 –
@OlavHaugen,我已經更新了我的答案。 –
偉大的作品。謝謝! –