2012-04-02 103 views
0

我有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 ---內部異常堆棧跟蹤結束---

任何人都知道爲什麼?

回答

1

因爲我使用lazy = true,當我序列化我的對象時,序列化器試圖序列化不被允許的代理對象。當我改變了映射到懶惰=假它工作!