Mongoカスタムシリアライゼーションでは、どうすればobjectIdを取得できますか?
IBsonSerializer を実装しましたが、データは希望どおりにデータベースに表示されています。ただし、以前は 5236ea9949444a06d7f50012 のような ObjectId を持っていたコレクションに挿入した後、私の ObjectId は空 (000000000000000000000000) になりました。ObjectId がデータベースにあることがわかりますので、そこにあることがわかります。コレクションに挿入した後、C# オブジェクトに入力されていません。
これが私のコードです:
public class EvaluationResultMongoSerializer : IBsonSerializer
{
public object Deserialize(BsonReader bsonReader, Type nominalType, Type actualType, IBsonSerializationOptions options)
{
throw new NotImplementedException();
}
public object Deserialize(BsonReader bsonReader, Type nominalType, IBsonSerializationOptions options)
{
throw new NotImplementedException();
}
public IBsonSerializationOptions GetDefaultSerializationOptions()
{
return null;
}
public void Serialize(BsonWriter bsonWriter, Type nominalType, object value, IBsonSerializationOptions options)
{
EvaluationResult er = (EvaluationResult)value;
bsonWriter.WriteStartDocument();
bsonWriter.WriteDouble("Duration", er.DurationInSeconds);
bsonWriter.WriteDateTime("Start", BsonUtils.ToMillisecondsSinceEpoch(er.startTime));
bsonWriter.WriteDateTime("End", BsonUtils.ToMillisecondsSinceEpoch(er.endTime));
bsonWriter.WriteString("Result", er.Result.ValueAsString);
bsonWriter.WriteEndDocument();
}
}
次のようにマッピングを登録します。
BsonSerializer.RegisterSerializer(
typeof(EvaluationResult),
new EvaluationResultMongoSerializer()
);
クラスマップを登録していません。