2012-07-12 24 views
7

Tôi không hiểu tham chiếu này đến loại khác' System.Collections.Generic.List`1 [CES.Model.SearchResult] 'và cách giải quyết vấn đề này.Không thể truyền đối tượng thuộc loại '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(); 

Đây là lớp SearchResult và lớp này chứa lớp 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); 
    } 

} 

Cảm ơn bạn đã dành thời gian.

Trả lời

9

Có lẽ điều này sẽ làm việc:

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

Trong thực tế, thông điệp cho tôi nghĩ rằng xml chứa một tập hợp các searchrestult, không phải là một kết quả tìm kiếm duy nhất.

[Chỉnh sửa] DJ KRAZE là đúng, mã này giả định rằng biến "kết quả" là loại List<SearchResult>. Bộ nối tiếp phải khớp với loại đối tượng mà nó sẽ tuần tự hóa.

+0

Steve bạn có thể muốn giải thích lý do tại sao bạn đang sử dụng Danh sách phản đối việc anh ta cố gắng truyền làm SearchResult. điều này có thể giúp anh ta nhận ra rằng đúc nên được cùng loại trong trường hợp của mình .. nơi ông có biến riêng được định nghĩa là List <> + 1 cho bạn cũng – MethodMan

+0

Cảm ơn Steve B. Một trường hợp khác của tôi không đọc thông báo lỗi một cách cẩn thận . – greg

Các vấn đề liên quan