1

私は大学のプロジェクトとして自動車オークションのウェブサイトを作っています。このサイトでは Web サービスを使用してすべての処理を行っていますが、私の作業を楽にするために、車に関する情報を格納するクラスを作成しました。

public class Car
{
    private int id;
    private string name;
    private string desc;
    private int startbid;
    private DateTime closingdate;
    public int Id
    {
        get
        {
            return id;
        }
    }
    public string Name
    {
        get
        {
            return name;
        }
    }
    public string Description
    {
        get
        {
            return desc;
        }
    }
    public int StartBid
    {
        get
        {
            return startbid;
        }
    }
    public DateTime ClosingDate
    {
        get
        {
            return closingdate;
        }
    }
    public Car(int id, string name, string desc, int startbid, DateTime closingdate)
    {
        this.id = id;
        this.name = name;
        this.desc = desc;
        this.startbid = startbid;
        this.closingdate = closingdate;
    }

}

ブラウザで .asmx を表示しようとするたびに、このクラスにはパラメーターなしのコンストラクターがないため、このクラスをシリアル化できないというエラーが表示されますが、このクラスを使用するものはすべてCarWeb サイトで正常に動作します (例:車に関する情報を表示すると、例外なくすべてが表示されます)。そのため、Web サービスはまだ機能しており、何らかの形でCarクラスがまだシリアル化されています。これはどのように可能ですか?

public Car() {}編集: .asmx を適切に表示するには、クラスに追加する必要があることを知っていますがset、すべてのプロパティにメソッドを追加する必要もあります。これらの結果はデー​​タベースから取得されるため、実際にはやりたくありません。したがって、(この場合) 読み取り専用です。では、この場合の適切な解決策は何ですか? おそらくObsolete属性かそれに類するものでしょうか?

4

1 に答える 1

1

コンストラクターをバイパスしてクラスのインスタンスを割り当てることができます。

var car = (Car)FormatterServices.GetUninitializedObject(typeof(Car));

しかし、MSDNが述べているように:

現在のメソッドは、ユーザーがすべてのフィールドにすぐに入力する場合にのみ、逆シリアル化に使用する必要があります。

したがって、Web サービスが機能するために内部でそれが行われている可能性があると思います。

于 2012-12-09T16:43:28.120 に答える