2012-07-12 247 views
7

我不明白這個引用另一種類型的‘System.Collections.Generic.List`1 [CES.Model.SearchResult]’,以及如何解決這個問題。無法投類型的對象System.Collections.Generic.List`1

Unable to cast object of type 'System.Collections.Generic.List`1[CES.Model.SearchResult]' to type 'CES.Model.SearchResult'. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.InvalidCastException: Unable to cast object of type 'System.Collections.Generic.List`1[CES.Model.SearchResult]' to type 'CES.Model.SearchResult'. 

Source Error: 


Line 1069:   XmlSerializer xs = new XmlSerializer(typeof(SearchResult)); 
Line 1070:   TextWriter textWriter = new StreamWriter(@"C:\temp\results.xml"); 
Line 1071:   xs.Serialize(textWriter, results); 
Line 1072:   ViewState["eventList"] = textWriter.ToString(); 
Line 1073:   textWriter.Close(); 

這裏是searchResult類,它包含SearchResultAttribute類。

public class SearchResult 
{ 
    private List<SearchResultAttribute> _attributes = null; 
    private List<SearchResult> _linkedSearchResults = null; 

    public string this[string key] 
    { 
     get 
     { 
      int resultIndex = _attributes.BinarySearch(new SearchResultAttribute(key, "")); 

      if (resultIndex < 0) 
       return ""; 
      else 
       return _attributes[resultIndex].Value; 
     } 
     set 
     { 
      int resultIndex = _attributes.BinarySearch(new SearchResultAttribute(key, "")); 

      if (resultIndex < 0) 
       return; 
      else 
       _attributes[resultIndex].Value = value; 
     } 
    } 

    public List<SearchResultAttribute> Attributes 
    { 
     get 
     { 
      return _attributes; 
     } 
     set 
     { 
      _attributes = value; 
     } 
    } 
    public List<SearchResult> LinkedSearchResults 
    { 
     get 
     { 
      return _linkedSearchResults; 
     } 
     set 
     { 
      _linkedSearchResults = value; 
     } 
    } 

    public SearchResult() 
    { 
     _attributes = new List<SearchResultAttribute>(); 
     _linkedSearchResults = new List<SearchResult>(); 
    } 
} 

public class SearchResultAttribute:IComparer<SearchResultAttribute>,IComparable<SearchResultAttribute> 
{ 
    public string Key { get; set; } 
    public string Value { get; set; } 

    public SearchResultAttribute() 
    { 
     Key = System.String.Empty; 
     Value = System.String.Empty; 
    } 

    public SearchResultAttribute(string key, string value) 
    { 
     Key = key; 
     Value = value; 
    } 

    public int Compare(SearchResultAttribute x, SearchResultAttribute y) 
    { 
     return (x.Key.CompareTo(y.Key)); 
    } 

    public int CompareTo(SearchResultAttribute other) 
    { 
     return this.Key.CompareTo(other.Key); 
    } 

} 

謝謝你的時間。

回答

9

也許這應該工作:

XmlSerializer xs = new XmlSerializer(typeof(List<SearchResult>)); 

事實上,該消息讓我想到的是,XML包含searchrestult的集合,而不是一個單一的搜索結果。

[編輯] DJ KRAZE是對的,這段代碼假設「結果」變量是List<SearchResult>。序列化器必須匹配它將要序列化的對象的類型。

+0

史蒂夫,你可能想解釋爲什麼你使用List 反對他試圖將其轉換爲SearchResult。這可能會幫助他認識到,在他的情況下投射應該是相同類型的......他將私人變量定義爲List <> + 1給你 – MethodMan 2012-07-12 21:59:26

+0

謝謝Steve B.另一個我沒有仔細閱讀錯誤信息的例子。 – greg 2013-10-20 17:08:47

相關問題