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 は予期されていませんでした。XmlInclude または SoapInclude 属性を使用して、静的に認識されていない型を指定します。 Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write6_File(String n, String ns, File o, Boolean isNullable, Boolean needType)\n Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write7_GetFilesByNameResponse(Object[] p)\n Microsoft. Xml.Serialization.GeneratedAssembly.

誰でも理由を知っていますか?

4

1 に答える 1

1

これは、lazy=true を使用し、オブジェクトをシリアル化したときに、シリアライザーが許可されていないプロキシ オブジェクトをシリアル化しようとしたためです。マッピングを lazy=false に変更すると、うまくいきました!

于 2012-08-05T20:10:30.203 に答える