2012-04-02 4 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; } 
    } 
} 

나는 파일 (목록)의 목록을 반환 웹 서비스 (안 WCF 서비스)이있다. 내가 서비스를 호출하면 메서드가 수행되지만 직렬화 프로세스가 실패합니다. 이것은 내가 예외 :

System.Web.Services.Protocols.SoapException : 서버 요청을 처리 할 수 ​​없습니다. ---> System.InvalidOperationException : XML 문서를 생성하는 중 오류가 발생했습니다. System.InvalidOperationException ---> : Castle.Proxies.UserProxy 형식이 예상되지 않았습니다. XmlInclude 또는 SoapInclude 특성을 사용하여 정적으로 알지 못하는 형식을 지정합니다. \ n Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write4_User (문자열 n, 문자열 ns, 사용자 o, 부울 isNullable, 부울 needType) \ n Microsoft. Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write6_File (문자열 n, 문자열 ns, 파일 o, 부울 isNullable, 부울 needType) \ n Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write7_GetFilesByNameResponse (Object [] p) \ n Microsoft System.Xml.Serialization.XmlSerializer.Serialize (XmlWriter xmlWriter, Object o, XmlSerializerNamespaces 네임 스페이스, String encodingStyle, String id)에서 \ n --- End (XmlSerializer.XmlSerializer.Remote) 내부 예외 스택 추적 --- \ n System.Xml.Serialization.XmlSerializer.Serialize (XmlWriter xmlWriter, Object o, XmlSerializerNamespaces 네임 스페이스, String encodingStyle , String id) \ n System.Web.Services.Protocols.SoapServerProtocol.WriteReturns (Object [] returnValues, Stream outputStream) \ n System.Web.Services.Protocols.WebServiceHandler.WriteReturns (Object [] returnValues) \ n at \ System.Web.Services.Protocols.WebServiceHandler.Invoke() \ n - 내부 예외 스택 추적 끝 ---

아무도 이유는 무엇입니까?

답변

1

왜냐하면 나는 lazy = true를 사용했고 객체를 직렬화했을 때 직렬 기가 허용되지 않는 Proxy 객체를 직렬화하려고 시도했기 때문입니다. lazy = false로 매핑을 변경했을 때 효과가있었습니다!