2012-04-02 5 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.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write4_User(String n、String ns、User o、Boolean isNullable、Boolean needType)\ nで静的に認識されない型を指定するには、XmlIncludeまたはSoapInclude属性を使用します。 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 objectSerialize、XmlSerializationWriter writer)\ n System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter、Object o、XmlSerializerNamespaces名前空間、String encodingStyle、String id)\ n --- End内部例外スタックトレースの\ --- 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にマッピングを変更したとき、それはうまくいった!

関連する問題