我有2個類從泛型基類派生。
序列化自定義對象
[Serializable()]
[XmlInclude(typeof(User))]
[XmlInclude(typeof(File))]
public class BaseEntity<T>
{
private long id;
[XmlAttribute(AttributeName = "id")]
public virtual long ID
{
get { return this.id; }
set { this.id = value; }
}
}
[Serializable()]
public class User : BaseEntity<User>
{
private string userName;
private string sharedDirectory;
private bool connected;
[XmlAttribute(AttributeName = "UserName")]
public virtual string UserName
{
get { return this.userName; }
set { this.userName = value; }
}
[XmlAttribute(AttributeName = "SharedDirectory")]
public virtual string SharedDirectory
{
get { return this.sharedDirectory; }
set { this.sharedDirectory = value; }
}
[XmlAttribute(AttributeName = "IsConnected")]
public virtual bool IsConnected
{
get { return this.connected; }
set { this.connected = value; }
}
}
[Serializable()]
public class File : BaseEntity<File>
{
private string name;
private User user;
[XmlAttribute(AttributeName = "Name")]
public virtual string Name
{
get { return this.name; }
set { this.name = value; }
}
[XmlElement(ElementName = "User", Type = typeof(User))]
public virtual User User
{
get { return this.user; }
set { this.user = value; }
}
}
我有一個返回文件(目錄)列表的Web服務(不WCF服務)。當我調用服務時,該方法已執行,但序列化過程失敗。這是我得到的例外:
System.Web.Services.Protocols.SoapException:服務器無法處理請求。 ---> System.InvalidOperationException:生成XML文檔時發生錯誤。 ---> System.InvalidOperationException:類型Castle.Proxies.UserProxy不是預期的。 Microsoft的Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write4_User(String n,String ns,User o,Boolean isNullable,Boolean needType)\ n可以使用XmlInclude或SoapInclude屬性指定靜態未知的類型。 Microsoft的Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write7_GetFilesByNameResponse(Object [] p)\ n中的Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write6_File(String n,String ns,File o,Boolean isNullable,Boolean needType)\ n。 Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer1.Serialize(Object objectToSerialize,XmlSerializationWriter writer)\ n在System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter,Object o,XmlSerializerNamespaces命名空間,字符串encodingStyle,字符串id)\ n --- End內部異常堆棧跟蹤--- \ n在System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter,Object o,XmlSerializerNamespaces命名空間,String encodingStyle ,String id)\ n在System.Web.Services.Protocols.WebServiceHandler.WriteReturns(Object [] returnValues)\ n在System.Web.Services.Protocols.SoapServerProtocol.WriteReturns(Object [] returnValues,Stream outputStream) System.Web.Services.Protocols.WebServiceHandler.Invoke()\ n ---內部異常堆棧跟蹤結束---
任何人都知道爲什麼?