2017-02-27 56 views
0

我在使用iTextSharp 5.5.10編寫一個程序來檢索pdf文件中嵌套書籤的標題。在PDF文件中檢索嵌套bookmars

我寫了一個循環函數,它將一個Dictionary<string, object>對象作爲輸入參數,並返回一個List<string>對象,但不起作用。

public static List<string> bookmarksList(Dictionary<string, object> parent) 
{ 
    List<string> PDFbookmarks = new List<string>(); 

    if (parent.ContainsKey("Kids")) 
    { 
     PDFbookmarks.Add(parent["Kids"].ToString()); 
     Dictionary<string, object> child = parent["Kids"] as Dictionary<string, object>; 
     bookmarksList(child); 
    } 

    return PDFbookmarks; 
} 

Dictionary<string, object>對象我從GetBookmark(PDFReader)方法得到它。

撇開這個事實,即ToString()方法顯然沒有給我真正的孩子的標題,問題是我在第一次定期調用時得到一個NullReferenceException:當我嘗試初始化函數中的子變量時,一個null指針。

相關的價值,Kids關鍵是IList<Dictionary<string, object>>對象本身,因爲在調試窗口中顯示:(?雖然這應該是一個List對象,而不是一個IList,我錯了)

System.Collections.Generic.List'1[System.Collections.Generic.Dictionary'2[System.String,System.Object]]]

,所以我不明白爲什麼我得到了null指針,而不是...

任何提示?

謝謝, Davide。

+0

請將最終解決方案作爲*答案*發佈,而不是添加*問題*的一部分。 – mkl

回答

0

我以爲downcasting會起作用,但事實並非如此。更改變量聲明是我的一天。我也重寫了整個功能,現在它完全按預期工作。

public static List<string> BookmarksList(Dictionary<string, object> parent, List<string> bookmarkList) 
{ 
    if (parent.ContainsKey("Kids")) 
    { 
     IList<Dictionary<string,object>> child = parent["Kids"] as IList<Dictionary<string, object>>; 

     foreach(Dictionary<string, object> tmpChild in child) 
     { 
      bookmarkList.Add(tmpChild["Title"].ToString()); 
      MyClass.BookmarksList(tmpChild, bookmarkList); 
     } 
    } 
    return bookmarkList; 
}