カスタムシリアライザーを作成したプロパティとしてオブジェクトがあります。コレクション内の文字列としてデータを表現したいので、ToStringを呼び出すだけです。
cm.MapMember(c => c.myObjectProperty).SetSerializer(new ObjectToStringSerializer() );
上記は一度だけ呼び出され、データを保存するときにうまく機能します。期待どおりに文字列値を持つ親オブジェクトを見ることができます。
基本的なシリアライザーは次のとおりです。
public class ObjectToStringSerializer : IBsonSerializer {
#region IBsonSerializer Members
public object Deserialize(MongoDB.Bson.IO.BsonReader bsonReader, Type nominalType, Type actualType, IBsonSerializationOptions options)
{
if (bsonReader.State == MongoDB.Bson.IO.BsonReaderState.Type && bsonReader.CurrentBsonType != MongoDB.Bson.BsonType.Null)
return Activator.CreateInstance(nominalType, new object[] { bsonReader.ReadString() });
return null;
}
public object Deserialize(MongoDB.Bson.IO.BsonReader bsonReader, Type nominalType, IBsonSerializationOptions options)
{
if( bsonReader.State == MongoDB.Bson.IO.BsonReaderState.Type && bsonReader.CurrentBsonType != MongoDB.Bson.BsonType.Null)
return Activator.CreateInstance(nominalType, new object[] { bsonReader.ReadString() });
return null;
}
public IBsonSerializationOptions GetDefaultSerializationOptions()
{
throw new NotImplementedException();
}
public void Serialize(MongoDB.Bson.IO.BsonWriter bsonWriter, Type nominalType, object value, IBsonSerializationOptions options)
{
if (value != null)
{
bsonWriter.WriteString(value.ToString());
}
else
bsonWriter.WriteNull();
}
#endregion
}
コレクションから親オブジェクトを取り戻そうとすると、例外がスローされます。
ReadBsonTypeは、StateがTypeの場合にのみ呼び出すことができ、StateがValueの場合は呼び出すことができません。
また、スタックトレースは、カスタムシリアライザーのdeserializeメソッドを呼び出そうとしているようには見えません。
呼び出されると予想される逆シリアル化メソッドのために何が欠けていますか?単純なシリアル化プロバイダーを追加しようとしましたが、それは正しくないと思います。シリアライザーの再ジェスチャも試しました。
BsonSerializer.RegisterSerializer(typeof(myObjectPropertyType), new ObjectToStringSerializer());
問題は、Deserializeメンバーの条件でした。
if (bsonReader.State == MongoDB.Bson.IO.BsonReaderState.Type && bsonReader.CurrentBsonType != MongoDB.Bson.BsonType.Null)
作成者に電話がかけられることはありませんでした。私はそれをに変更しました
if (bsonReader.State == MongoDB.Bson.IO.BsonReaderState.Value && bsonReader.CurrentBsonType == MongoDB.Bson.BsonType.String)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加