[英]Using reflection to convert a non-generic dictionary to a generic one, without the generic parameters
我正在為此 PropertyList DTD處理自定義 XML 序列化,到目前為止,我已經完全涵蓋了除“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));
但是我找不到任何這樣的方法來為字典做到這一點。 如果沒有通用參數Dictionary<TKey, TValue>
Hashtable
無法轉換為通用Dictionary<TKey, TValue>
。
我會創建第二個 xmlreader 來讀取孩子:
XmlReader reader = XmlReader.Create(@"c:\temp\test.xml");
reader.ReadToFollowing("ENVELOPE");
StringReader sReader = new StringReader(reader.ReadInnerXml());
XmlReader childReader = XmlReader.Create(sReader);
childReader.MoveToContent();
reader.MoveToContent();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.