2017-02-27 76 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; 
}