0

私は Mongo-C# 環境にいて、10Gen Mongo ドライバーを使用しています。サブドキュメントがあり、そのサブドキュメントが厳密に型指定されていない場合に、Mongo ドキュメント内のデータを逆シリアル化しようとすると、問題に直面しています。つまり、サブドキュメントが Expando または単に匿名の object() である場合、次のエラーで逆シリアル化中にエラーが発生します。

System.IO.FileFormatException: System.Object に逆シリアル化されるドキュメントは空である必要があります。

オブジェクトをオンザフライで BSONDocument に変換する Mongo 読み取り/書き込みの前後にフィルターを配置できますが、BSOnDocument と (Expando または匿名型) の間で利用できるキャストはないと思います。

カスタムのデシリアライゼーション ツールを作成することは、このためには大変な作業のように思えます。誰かが以前にこの問題に直面したことがあるのだろうか、そして彼らはこの問題をどのように処理したのでしょうか?

4

2 に答える 2

1

現在、10gen ドライバーは .NET 3.5 に基づいているため、動的オブジェクトはサポートされていません。現在、これを処理する方法は、ExtraElements メンバーを使用することです。ここでそれについて読むことができます: http://www.mongodb.org/display/DOCS/CSharp+Driver+Serialization+Tutorial#CSharpDriverSerializationTutorial-Supportingextraelements

後日、.NET 4.0 を完全にサポートし、動的オブジェクトを完全にサポートする予定です。今すぐこの機能が本当に必要な場合は、https ://github.com/craiggwilson/mongo-csharp-driver/tree/dynamic で別のアセンブリを使用して、サイド バイ サイド サポートの急増を確認できます。ただし、これはテストされておらず、単なるスパイクであるため、注意が必要です。

于 2012-06-01T00:06:13.223 に答える
0

動的/匿名型を保存する場合は、カスタム IBsonSerializer を使用できます。

コード サンプルについては、 https://stackoverflow.com/a/23244044/327825を参照してください

于 2014-04-23T12:26:25.587 に答える