我正在为这个PropertyListDTD进行自定义XML序列化,到目前为止,我已经完全涵盖了除"dict";。一些dict本质上是这样的对象:
<key>1</key>
<dict>
<key>Track ID</key><integer>1</integer>
<key>Name</key><string>Baby</string>
<key>Artist</key><string>Justin Bieber</string>
[...]
</dict>
我已经处理过了。
property.SetValue(obj, xmlReader.ReadElementContentAs(propertyType, null));
对于数组,我可以使用非类型化的Array
类(使用ArrayList
类来构建它(,这使得人们可以使用类型变量而不是泛型,然后可以方便地直接进入SetValue
方法并自动转换为int[]
或对象中的任何其他泛型。
ArrayList array = new ArrayList();
do
{
array.Add(GetDictValue(arrayReader, elementType));
}
while (arrayReader.ReadToFollowing(elementTypeName));
property.SetValue(obj, array.ToArray(elementType));
但我找不到任何这样的方法来为字典做这件事。如果没有通用参数,Hashtable
就无法转换为通用Dictionary<TKey, TValue>
。
我将创建第二个xmlreader来读取子级:
XmlReader reader = XmlReader.Create(@"c:temptest.xml");
reader.ReadToFollowing("ENVELOPE");
StringReader sReader = new StringReader(reader.ReadInnerXml());
XmlReader childReader = XmlReader.Create(sReader);
childReader.MoveToContent();
reader.MoveToContent();