有自定義的3個類,House、SaleHouse、RentHouse。SaleHouse和RentHouse是House類的子類。在WebService中有一個方法是返回House類。
[WebMethod] public House Get(int houseId) { return House.Get(houseId); }
調試報錯如下:
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