WebService生成XML文檔時出錯。不應是類型XXXX。使用XmlInclude或SoapInclude屬性靜態指定非已知的類型。

 

情況是這樣的有自定義的3個類,House、SaleHouse、RentHouse。SaleHouse和RentHouse是House類的子類。在WebService中有一個方法是返回House類。

 

1 [WebMethod]
2 public House Get(int houseId)
3 {
4     return House.Get(houseId);
5 }

調試報錯如下:

System.InvalidOperationException: 生成 XML 文檔時出錯。 ---> 
System.InvalidOperationException: 
不應是類型 YajukeLib.Housing.SaleHouse。
使用 XmlInclude 或 SoapInclude 屬性靜態指定非已知的類型。

在網上查了一下資料,說是要使用屬性XmlIncludeAttribute。然後將[XmlInclude(typeof(House))]加到House類和WebService中。還是報上述的錯誤。加[Serializable]也不管用。

又在MSDN上查找XmlIncludeAttribute的定義如下:允許 XmlSerializer 在它序列化或反序列化對象時識別類型。所以我想是因爲方法返回的類型其實是House類的子類,XmlSerializer在序列化時只能識別父類,而不能識別子類,所以導致序列化的錯誤。所以我將[XmlInclude(typeof(SaleHouse))]和[XmlInclude(typeof(RentHouse))]同時加到WebService中,問題解決。

 

[XmlInclude(typeof(SaleHouse))]
[XmlInclude(
typeof(RentHouse))]
public class HouseService : System.Web.Services.WebService
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章