问题 从反序列化期间添加的JObject中删除双花括号


我有一个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继承一个额外的花括号?


2462
2017-12-21 15:35


起源

同样的问题。{{“name”:“john”,“surname”:“doe”,“complexObj”:{“id”:1,“name”:“test”}}}。我需要删除双括号并将其用作Jobject itsef。所以无法转换为字符串。任何解决方案 - remya thekkuvettil


答案:


这会导致问题还是你只是好奇?当我将数据作为“对象”类型发送到另一个容器类中时,我遇到了同样的问题。容器本身正在被反序列化,但内部的对象却没有。因为双花括号,我认为它没有反序列化。实际上,似乎可能只是JObjects的样子。真正的原因可能是因为我关闭了它发送类型信息的设置,因为我反序列化为“对象”,它不可能只知道字符串中的类型。

无论哪种方式,我注意到如果你在它上面写了“.ToString()”那么双花括号就会消失。这意味着我能够通过简单地解决我的问题:

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

我不确定这是不是一个错误,但我的猜测是它只是一个内部实现细节,这就是为什么当你“.ToString()”时它们“固定”了。


10
2018-06-01 13:22