2017-07-26 22 views
0

私はTestObjectクラスからObjectIdを設定しようとしています。唯一の問題は、例外が発生し続けることです。この直列化プロセスをデバッグする方法はありません。バイナリはObjectIdSerializerの有効な表現ではありません

マイのMongoDB: 'MongoDataSource' データソースを解決しながら

{ 
    "_id" : LUUID("964c87a0-bf8a-1f4e-be85-7aadb5315adb") 
} 

エラーが発生しました:データ検索方法をinvaking中にエラーが発生しました。

--- ---のInnerException

クラスTestObjectのオブジェクトのプロパティをデシリアライズ中にエラーが発生しました:BsonType「バイナリ」から「ObjectIdが」デシリアライズすることはできません。

--- ---のInnerException

はBsonType 'バイナリ' から 'OBJECTID' をデシリアライズすることはできません。

[DataObject] 
public class TestObject 
{ 
    [BsonId] 
    [BsonElement("_id")] 
    public ObjectId ObjectId { get; set; } 
} 

私はそれBsonType.Binary

作る場合は「MongoDataSource」データソースを解決中にエラーが発生しました:データ検索方法をinvaking中にエラーが発生しました。

は--- ---のInnerException

例外が呼び出しのターゲットによってスローされました。

--- ---のInnerException

バイナリObjectIdSerializerのための有効な表現ではありません。

[DataObject] 
public class TestObject 
{ 
    [BsonId] 
    [BsonElement("_id")] 
    [BsonRepresentation(BsonType.Binary)] 
    public ObjectId ObjectId { get; set; } 
} 
+0

「ObjectId」型にキャストすべきではないかもしれません。つまり、注釈とシリアライザを変更していますが、クラス自体のプロパティの「型」を変更するのを忘れていました。言葉のように丸い穴に四角いペグを詰め込むような並べ替え。 –

答えて

1

問題はMongoのコレクション内のフィールドは、(それはGUIDです)のObjectIdと比較して全く異なるタイプであることLUUIDとして記憶されることです。あなたのマッピングクラスで

は、あなたが

[DataObject] 
public class TestObject 
{ 
    [BsonId] 
    [BsonElement("_id")] 
    public ObjectId ObjectId { get; set; } 
} 

を定義し、ドライバーが値 964c87a0-bf8a-1f4e-be85-7aadb5315adb(GUIDの文字列表現を)デシリアライズしようとすると失敗します。

朗報ドライバとGUID船のIDジェネレータ、あなただけで簡単にドライバの慣習に従うことによって、所望の結果を得ることができます。

public class TestObject 
{ 
    public Guid Id { get; set; } // note the property is renamed in Id 
} 

あなたがいる限り[BsonId][BsonElement("_id")][BsonId(IdGenerator = typeof(GuidGenerator))]属性を省略することができofficial documentationを1としてプロパティの名前はIdで、そのタイプはサポートされているタイプの1つです。

+0

ありがとう私はちょうどそれを働かせました。 – StuiterSlurf

関連する問題