Когда я пытаюсь сериализовать данные в XML, я использую этот полезный класс: http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx
Итак, у меня есть:
public class LocalizableString : SerializableDictionary<string, object>
{
public object Get(string language)
{
return this[language];
}
public void Set(string language, string value)
{
Util.SetDictionaryValue<string, object>(this, language, value);
}
}
Если я использую обычный код этого:
public void WriteXml(System.Xml.XmlWriter writer)
{
XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));
foreach (TKey key in this.Keys)
{
writer.WriteStartElement("item");
writer.WriteStartElement("key");
keySerializer.Serialize(writer, key);
writer.WriteEndElement();
writer.WriteStartElement("value");
TValue value = this[key];
valueSerializer.Serialize(writer, value);
writer.WriteEndElement();
writer.WriteEndElement();
}
}
Я получу:
<PersonenListe>
<PersonenArray>
<PersonObjekt>
<PropertyType>Unknown</PropertyType>
<ID>0</ID>
<FriendlyName>Max Man</FriendlyName>
<City>Capitol City</City>
<Age>33</Age>
<Name>
<item>
<key>
<string>test1</string>
</key>
<value>
<anyType xmlns:q1="http://www.w3.org/2001/XMLSchema" p8:type="q1:string" xmlns:p8="http://www.w3.org/2001/XMLSchema-instance">test2</anyType>
</value>
</item>
</Name>
</PersonObjekt>
</PersonenArray>
</PersonenListe>
Но мне нужно иметь код с автоматическим определением типа, как указано выше, но без кода anyType (только с типом свойства), как в следующемпример:
<PersonenArray>
<PersonObjekt>
<PropertyType>Unknown</PropertyType>
<ID>0</ID>
<FriendlyName>Max Man</FriendlyName>
<City>Capitol City</City>
<Age>33</Age>
<Name>
<item>
<key>
<string>test1</string>
</key>
<value>
<string>test2</string>
</value>
</item>
</Name>
</PersonObjekt>
</PersonenArray>
</PersonenListe>