2016-08-10 5 views
0

私は通常、方法Newtonsoft.Json.JsonConvert.DeserializeObjectが使用されていることを知っています。しかし、この場合、私はシリアライゼーションを行い、それに続くデシリアライズは動作しません。jsonオブジェクトを逆シリアル化する方法は?

static public void mess(test message) 
{ 
    try 
    { 
    test temp = new test(id); // The only thing I don't show is that I obtain a valid ObjectId in id 
    string messageSerialized = Newtonsoft.Json.JsonConvert.SerializeObject(temp); 
    Newtonsoft.Json.JsonConvert.DeserializeObject<test>(messageSerialized); 
    } 
    catch (Exception e) 
    { 
    Console.WriteLine(e.Message); 
    } 
} 

は、私は次の例外を取得します。エラー値を変換する「57ab57ba86597bac513ce130は」MongoDB.Bson.ObjectIdを入力するには」。パス「」、行1、位置31」

しかし私はそれがどのようにそれをデシリアライズすることができるタイプをシリアライズが、できなかった、問題はタイプであることを取得するテストの

構造:?

public class test 
    { 
     public MongoDB.Bson.ObjectId a; 

     public test(MongoDB.Bson.ObjectId b) 
     { 
      a = b; 
     } 
    } 


messageSerialized = "{\"a\":\"57ab57ba86597bac513ce130\"}" 
+0

「BrowsersObj」の定義は何ですか? –

+0

Json.NETはパブリックコンストラクタなしで型をシリアル化できますが、そのような型を逆シリアル化することはできません。場合によっては、データモデルにそのようなタイプが含まれている可能性があります。それを超えて私たちは[mcve]が必要です。 – dbc

+0

私はそれが15から20のプロパティを持つクラスである可能性がありますが、それらの多くはクラスを含むクラスです...エラーはオブジェクトIDプロパティにはっきりとあるので本当に必要ですか? – Cher

答えて

0

値を変換エラー MongoDB.Bson.ObjectId」と入力する "ここでは、オブジェクトIDである"。

はい、エラーを見て、文字列"here is an object ID"Bson.ObjectIdに逆シリアル化しようとしていますが、これは決して成功しません。シリアライズされたJSON文字列を構造体BrowsersObjと共に投稿する必要があります。

最新の編集では、"57ab57ba86597bac513ce130"はMongoDB ObjectIdではなく、文字列です。あなたのMongoDBコレクションをチェックしてください。おそらくをObjectIDとして保存するのではなく、保存するために上書きしてください。string

+0

私はそれを編集しました、それは実際にオブジェクトIDです。私はそれを書き留めておらず、更新しました すぐに構造体と逆シリアル化されたオブジェクトを追加します – Cher

関連する問題