如何在序列化到xml时进行自动类型定义
本文关键字:类型 定义 序列化 xml | 更新日期: 2023-09-27 18:19:32
当我尝试将数据序列化为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>
这是因为您的底层Dictionary类型为<string, object>
。如果你的键和值总是字符串,那么从更改你的第一行
public class LocalizableString : SerializableDictionary<string, object>
至
public class LocalizableString : SerializableDictionary<string, string>
我想这应该能解决你的问题。