Mongodb文字列をオブジェクトに逆シリアル化します

QuestionableUser

カスタムシリアライザーを作成したプロパティとしてオブジェクトがあります。コレクション内の文字列としてデータを表現したいので、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());
QuestionableUser

問題は、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]

編集
0

コメントを追加

0

関連記事

分類Dev

jsontwitter文字列をオブジェクトに逆シリアル化します

分類Dev

json文字列を.NETオブジェクトのリストに逆シリアル化します

分類Dev

Json.Netで逆シリアル化し、サブオブジェクトを文字列/同様に逆シリアル化し、jsonを保持しますか?

分類Dev

JSONオブジェクトプロパティを文字列に逆シリアル化します

分類Dev

ServiceStack.Textは、文字列を単一オブジェクトのnull参照に逆シリアル化します

分類Dev

Json文字列をオブジェクトJavaに逆シリアル化します

分類Dev

json文字列をオブジェクトc#.netに逆シリアル化します

分類Dev

CSV文字列をC#オブジェクトに逆シリアル化します

分類Dev

JSON文字列を複数のC#オブジェクトに逆シリアル化します

分類Dev

json文字列をオブジェクトに逆シリアル化する方法

分類Dev

json newtonsoft:文字列のリストを含むオブジェクトを逆シリアル化します

分類Dev

オブジェクトをバイナリに(逆)シリアル化して文字列を形成する方法は?

分類Dev

Json newtonsoft:オブジェクトから文字列配列を逆シリアル化します

分類Dev

選択したJSONオブジェクトをJSON文字列から逆シリアル化します

分類Dev

オブジェクトを文字列にシリアル化します

分類Dev

オブジェクトを文字列にシリアル化します

分類Dev

オブジェクトを文字列にシリアル化します

分類Dev

オブジェクト文字列を逆シリアル化し、文字列をブール値に変換します

分類Dev

ジェネリックオブジェクトを文字列にシリアル化/逆シリアル化

分類Dev

Jacksonを使用して、JSON文字列またはオブジェクトを文字列フィールドに逆シリアル化します

分類Dev

Jacksonを使用して、JSON文字列またはオブジェクトを文字列フィールドに逆シリアル化します

分類Dev

JsonスキーマをJson文字列またはオブジェクトに逆シリアル化する

分類Dev

RestSharpを使用してJSONをオブジェクトまたは配列に逆シリアル化します

分類Dev

JSONをオブジェクトC#に逆シリアル化します

分類Dev

ExpandoObjectをオブジェクトに逆シリアル化します

分類Dev

Jsonはオブジェクトを空に逆シリアル化します

分類Dev

ODataをオブジェクトに逆シリアル化しますか?

分類Dev

JSONをc#オブジェクトに逆シリアル化します

分類Dev

文字列値に埋め込まれた子オブジェクトを使用してJSON文字列を逆シリアル化します

Related 関連記事

  1. 1

    jsontwitter文字列をオブジェクトに逆シリアル化します

  2. 2

    json文字列を.NETオブジェクトのリストに逆シリアル化します

  3. 3

    Json.Netで逆シリアル化し、サブオブジェクトを文字列/同様に逆シリアル化し、jsonを保持しますか?

  4. 4

    JSONオブジェクトプロパティを文字列に逆シリアル化します

  5. 5

    ServiceStack.Textは、文字列を単一オブジェクトのnull参照に逆シリアル化します

  6. 6

    Json文字列をオブジェクトJavaに逆シリアル化します

  7. 7

    json文字列をオブジェクトc#.netに逆シリアル化します

  8. 8

    CSV文字列をC#オブジェクトに逆シリアル化します

  9. 9

    JSON文字列を複数のC#オブジェクトに逆シリアル化します

  10. 10

    json文字列をオブジェクトに逆シリアル化する方法

  11. 11

    json newtonsoft:文字列のリストを含むオブジェクトを逆シリアル化します

  12. 12

    オブジェクトをバイナリに(逆)シリアル化して文字列を形成する方法は?

  13. 13

    Json newtonsoft:オブジェクトから文字列配列を逆シリアル化します

  14. 14

    選択したJSONオブジェクトをJSON文字列から逆シリアル化します

  15. 15

    オブジェクトを文字列にシリアル化します

  16. 16

    オブジェクトを文字列にシリアル化します

  17. 17

    オブジェクトを文字列にシリアル化します

  18. 18

    オブジェクト文字列を逆シリアル化し、文字列をブール値に変換します

  19. 19

    ジェネリックオブジェクトを文字列にシリアル化/逆シリアル化

  20. 20

    Jacksonを使用して、JSON文字列またはオブジェクトを文字列フィールドに逆シリアル化します

  21. 21

    Jacksonを使用して、JSON文字列またはオブジェクトを文字列フィールドに逆シリアル化します

  22. 22

    JsonスキーマをJson文字列またはオブジェクトに逆シリアル化する

  23. 23

    RestSharpを使用してJSONをオブジェクトまたは配列に逆シリアル化します

  24. 24

    JSONをオブジェクトC#に逆シリアル化します

  25. 25

    ExpandoObjectをオブジェクトに逆シリアル化します

  26. 26

    Jsonはオブジェクトを空に逆シリアル化します

  27. 27

    ODataをオブジェクトに逆シリアル化しますか?

  28. 28

    JSONをc#オブジェクトに逆シリアル化します

  29. 29

    文字列値に埋め込まれた子オブジェクトを使用してJSON文字列を逆シリアル化します

ホットタグ

アーカイブ