私は、ジェネリックベースクラスから派生した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 - 内部例外スタックトレースの末尾---
いずれかがわかりますか?