簡體   English   中英

使用反射將非泛型字典轉換為泛型字典,沒有泛型參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM