Я использую DataContractSerializer
для сериализации объекта, содержащего член Dictionary<string,object>
, помеченный [DataMember()]
. Идея состоит в том, чтобы иметь гибкий набор атрибутов объекта, и я не знаю, какими могут быть эти атрибуты.
Это прекрасно работает, когда я помещаю объекты int
, double
и string
в словарь, но когда я помещаю в него List<string>
, он не может десериализовать объект с помощью:
System.InvalidOperationException: Node type Element is not supported in this operation.
Весь словарь сериализуется в XML, и это выглядит довольно разумно:
<Attributes xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<d2p1:KeyValueOfstringanyType>
<d2p1:Key>name</d2p1:Key>
<d2p1:Value xmlns:d4p1="http://www.w3.org/2001/XMLSchema" i:type="d4p1:string">Test object</d2p1:Value>
</d2p1:KeyValueOfstringanyType>
<d2p1:KeyValueOfstringanyType>
<d2p1:Key>x</d2p1:Key>
<d2p1:Value xmlns:d4p1="http://www.w3.org/2001/XMLSchema" i:type="d4p1:double">0.5</d2p1:Value>
</d2p1:KeyValueOfstringanyType>
<d2p1:KeyValueOfstringanyType>
<d2p1:Key>y</d2p1:Key>
<d2p1:Value xmlns:d4p1="http://www.w3.org/2001/XMLSchema" i:type="d4p1:double">1.25</d2p1:Value>
</d2p1:KeyValueOfstringanyType>
<d2p1:KeyValueOfstringanyType>
<d2p1:Key>age</d2p1:Key>
<d2p1:Value xmlns:d4p1="http://www.w3.org/2001/XMLSchema" i:type="d4p1:int">4</d2p1:Value>
</d2p1:KeyValueOfstringanyType>
<d2p1:KeyValueOfstringanyType>
<d2p1:Key>list-of-strings</d2p1:Key>
<d2p1:Value>
<d2p1:string>one string</d2p1:string>
<d2p1:string>two string</d2p1:string>
<d2p1:string>last string</d2p1:string>
</d2p1:Value>
</d2p1:KeyValueOfstringanyType>
</Attributes>
Обратите внимание на list-of-strings
в конце. У него есть все значения, но ничего не указывает на то, что это List<string>
или что-то в этом роде.
Как правильно поступить в этой ситуации?