使用反射将非泛型字典转换为不带泛型参数的泛型字典



我正在为这个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();

最新更新