1

私はクラスを持っています:

class Product
{
    public String Name { get; private set; }
    private List<Release> releases;
    private List<Area> areas;

    public List<Release> Releases
    {
        get
        {
            return new List<Release>(releases);
        }
        private set
        {
            releases = value
        }
    }

    public List<Area> Area
    {
        get
        {
            return new List<Area>(areas);
        }
        private set
        {
            areas = value
        }
    }

    public Product(String Name)
    {
        this.Name = Name;
        this.Releases = new List<Release>();
        this.Areas = new List<Area>();
    }

    public Product(String Name, List<Release> Releases, List<Area> Areas)
    {
        this.Name = Name;
        this.Releases = Releases;
        this.Areas = Areas;
    }
}

私の理解では、Mongodb bsonシリアライザーはProduct、すべてのプロパティ/フィールドにパブリック読み取りおよび書き込みアクセス権がなく、引数なしのコンストラクターを提供していないため、オブジェクトを自動的に逆シリアル化/シリアル化できません。これを完全に逆シリアル化可能に構成するにはどうすればよいですか?mongodb.orgでシリアル化のチュートリアルを調べましたが、このシナリオについては説明していません。このhttps://jira.mongodb.org/browse/CSHARP-476の機能強化も見つかりましたが、まだ実装されていないようです。

現在、同じフィールド/プロパティを持つ別のクラスProductDocがありますが、それらは完全なパブリック読み取りおよび書き込みアクセス権を持っており、引数なしのコンストラクターを提供しているため、mongodbドライバーはこのタイプを問題なく自動マップできます。ProductオブジェクトをProductDocオブジェクトに変換するだけです。 DBへの読み取り/書き込みが必要です。しかし、これは非常に単純ですが、非常にハッキーなようです。

アップデート:

私のパブリックプロパティのセットアクセサーがプライベートであるかどうかは問題ではないようです。プロパティ自体がパブリックであり、引数のないコンストラクターがないことも、逆シリアル化プロセスに影響を与えないようです。誰かがこれがどのように機能するかを確認できますか?ここの情報が正しいかどうか。

4

1 に答える 1

1

クイックスタートチュートリアルは正しいです。それらにはプライベートゲッターとセッターを使用できます。しかし、心配なことがあれば、テストプログラムを作成して試してみるのが常に最善の答えです。「パブリック」読み取り/書き込みは、ゲッターまたはセッターの1つがパブリックである必要があることを示します。

于 2012-09-06T15:33:53.310 に答える