2016-12-21 13 views
7

中括弧 "{}"で始まり、終わりのJSON文字列があります。デシリアライズ時に追加されたJObjectから二重中括弧を削除します。

オブジェクトをデシリアライズしますが、これを実行すると、開始点と終了 "{{}}"に二重中括弧が表示されることがわかります。

私のコードは、これは私のJSON文字列が

"{ \"_id\" : \"582c459d54b6e43d307929f8\", \"LoanName\" : 
... 
} 

これは私のloanVersionedDocが

{{ 
    "LoanName": "Test One", 
    "isActive": "True", 
    "Stages": [ 
    { 
     "StageName": "Stage One", 
     "isComplete": false 
    }, 
    { 
     "StageName": "Stage Two - CAG Approval and Indicative Terms", 
     "isComplete": true 
    }, 
    { 
     "StageName": "Stage Three", 
     "isComplete": false 
    } 
    ], 
    "Activities": [ 
    { 
     "ActivityName": "Generate due diligence report", 
     "isComplete": "Complete", 
     "ActivityParent": "Stage Two - CAG Approval and Indicative Terms" 
    }, 
    { 
     "ActivityName": "Received Stage 2 document from BDM", 
     "isComplete": "NA", 
     "ActivityParent": "Stage Two - CAG Approval and Indicative Terms" 
    }, 
... 
}} 

のように見えるものであるように見えるものである。この

//deserializeobject json string into jobject 
     JObject loanVersionedDoc = JsonConvert.DeserializeObject<JObject>(s);   

    //Get the latest value from versioned document 

     JObject loanLatestVersion = Versioning.demultiplicifyingParseForLatest(loanVersionedDoc); 

    //TODO get the latest activity.isComplete value 

     string activityCompletionStatus = (string)loanVersionedDoc.GetValue("Activities[0].isComplete"); 

ようになり、私は何をしなければなりませんデシリアライズ時にJObjectに余分な中括弧を継承させるのは間違っていますか?

+0

{{"name": "john"、 "surname": "doe"、 "complexObj":{"id":1、 "name": "test"}}}二重ブレースを削除して、それをJobject itsefとして使用する必要があります。だから、文字列に変換できません。任意の解決策??? –

答えて

5

これは問題を引き起こしていますか、それとも好奇心ですか?私は別のコンテナクラスの中にタイプ "オブジェクト"としてデータを送るときも同じ問題がありました。コンテナ自体は正しくデシリアライズされていましたが、内部のオブジェクトはデシリアライズされていませんでした。私はそれが二重中括弧のためにそれを脱直列化していないと思った。実際には、JObjectsの見た目だけかもしれないようです。実際の理由は、タイプ情報を送信した設定を無効にしていたためで、オブジェクトをデシリアライズしていたため、文字列だけのタイプを知ることができませんでした。

どちらの方法でも、 ".ToString()"を実行した場合、二重中括弧が消えてしまうことに気付きました。これは私が単に行うことで、私の問題を解決することができた意味:「

var someType = JsonConvert.DeserializeObject<SomeType>(jObject.ToString()); 

私は、これはバグであるかどうかわからないが、私の推測では、それは単に内部実装の詳細だと、彼らはそれを持っている理由があるということですあなたが ".ToString()"のときに固定されています。

関連する問題