一尘不染

从反序列化过程中添加的JObject删除双大括号

json

我有一个以大括号“ {}”开头和结尾的JSON字符串。

然后,我反序列化该对象,但是完成此操作后,我发现我现在在开头和结尾的“ {{}}”处都有两个大括号。

我的代码看起来像这样

    //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");

这就是我的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"
    },
...
}}

在反序列化时,导致JObject继承一个额外的花括号,我必须做错什么?


阅读 976

收藏
2020-07-27

共1个答案

一尘不染

这是造成问题还是您只是好奇?在另一个容器类中发送数据作为“对象”类型时,我遇到了同样的问题。容器本身正在正确地反序列化,但是里面的对象却没有。我以为它没有反序列化,因为双花括号。实际上,似乎只是JObjects的外观。真正的原因可能是因为我已经关闭了它发送类型信息的设置,并且由于我反序列化为“对象”,所以无法单独从字符串知道什么类型。

无论哪种方式,我都注意到,如果对它执行了“ .ToString()”,则双花括号将消失。这意味着我只需执行以下操作即可解决我的问题:

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

我不确定这是否是一个错误,但我想这只是一个内部实现细节,这就是为什么当您“ .ToString()”时将其“修复”。

2020-07-27