当前位置: 首页 > 面试题库 >

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

宗政法
2023-03-14
问题内容

我有一个以大括号“ {}”开头和结尾的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继承一个额外的花括号,我必须做错什么?


问题答案:

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

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

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

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



 类似资料:
  • 问题内容: 将xml文件序列化为.net c#对象后,在返回的json中获取k_BackingField。 我已经将DataContract和DataMember属性添加到.net c#对象,但是在json客户端上却什么也没得到。 返回的json的示例: 问题答案: 如果可以在序列化中使用该类,则实际上不建议使用自动属性语法。支持字段是由编译器生成的,每次编译代码时都会不同。即使未对类进行任何更改

  • 我在使用Jackson1.9.13(和Jackson2.5.0)进行序列化/反序列化时遇到了一个问题,现在已经解决了几天了,没有任何成功。 我的目标是使用@jsonanygetter&@jsonanysetter,我想动态地计算对象是否应该写入输出。我有一个用ObjectMapper序列化的JSON定义(并检查是否应该包含对象),然后将对象转换回字符串。 为此,我使用了一个“HidableSeri

  • 我正在尝试使用网络库kryonet创建一个多人游戏,我得到了连接和发送字符串的工作,但现在我正在尝试发送对象。我想做的是发送一个数组列表,但它给了我这个错误。我也尝试只发送一个对象,它给了我同样的错误。 我尝试在Metor类中创建一个没有参数的构造函数,但这也不起作用 编辑:所以我得出的结论是,Kryonet在序列化slick2d图像类时有问题,或者与Kryonet和slick2d有不同的冲突。

  • 问题内容: 我很高兴使用Newtonsoft JSON库。例如,我将从.NET对象创建一个,在这种情况下为Exception的实例(可能是子类,也可能不是子类) 现在我知道该库可以将JSON文本(即字符串)反序列化为对象 但我正在寻找的是: 显然,我可以从头回到JSON文本,然后使用反序列化功能,但这对我来说似乎是倒退的。 问题答案: 根据这篇文章,现在好多了: 文档: 将JSON转换为类型

  • 编写适当删除双链接列表中由(数据值14)指向的节点的代码片段。 我想我知道如何做到这一点: (1)使右侧的节点的元素指向左侧的节点 (2)使左侧的节点的元素指向右侧的节点 (3) 将指向NULL的节点元素设置为NULL并将其删除。 但是我忘记了如何用代码写这个(已经有一段时间了)。我在想它会是这样的(我假设节点是一个结构,它保存一个int数据,节点*下一个,节点*上一个): 编写代码片段以插入介于

  • 我在序列化和反序列化同一JVM中的对象列表时遇到问题。确切地说,现在我的对象与对象具有相同的引用,它有以下规则: 现在在我的对象列表反序列化之后,在某个时候字母表引用不匹配。我用以下方法检查了一下: 得到了以下结果 现在看看VMId,既然它们是相同的,那么它不应该是相同的对象吗,就像上面的逻辑一样?谢谢你的帮助。