首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从反序列化过程中添加的JObject中删除双花括号

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

Stack Overflow用户
提问于 2016-12-21 23:35:12
回答 3查看 17.2K关注 0票数 29

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

然后我对对象进行反序列化,但是当反序列化完成时,我看到在开始和结束"{{}}“处有两个大括号。

我的代码如下所示

代码语言:javascript
复制
    //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字符串的样子

代码语言:javascript
复制
"{ \"_id\" : \"582c459d54b6e43d307929f8\", \"LoanName\" :
...
 }

这是我的loanVersionedDoc的样子

代码语言:javascript
复制
{{
  "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在反序列化时继承额外的花括号?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-01 21:22:42

这是一个问题,还是你只是好奇?当我在另一个容器类中作为"object“类型发送数据时,我也遇到了同样的问题。容器本身被正确地反序列化了,但是里面的对象却没有被反序列化。我认为它没有反序列化它,因为有双花括号。实际上,这看起来可能就是JObjects的样子。真正的原因可能是因为我关闭了它发送类型信息的设置,因为我是反序列化到"object“的,所以它不可能仅从字符串就知道类型是什么。

无论哪种方式,我注意到如果你对它做了".ToString()“,那么双花括号就会消失。这意味着我能够通过简单的操作来解决我的问题:

代码语言:javascript
复制
var someType = JsonConvert.DeserializeObject<SomeType>(jObject.ToString());

我不确定这是不是一个bug,但我猜这只是一个内部实现细节,这就是为什么当你".ToString()“时他们会”修复“它。

票数 24
EN

Stack Overflow用户

发布于 2019-07-30 15:49:43

在我的情况下,我想

代码语言:javascript
复制
"object" : {
        [
            {"a"="b"},
            {"a"="b"},
            {"a"="b"},
            [
                {"a"="b"},
                {"a"="b"}
            ]
        ]
    }

To

"object" : {
        [
            {"a"="b"},
            {"a"="b"},
            {"a"="b"},
            {"a"="b"},
            {"a"="b"}
        ]
    }

我使用foreach非常简单,如下所示

代码语言:javascript
复制
alpha =  @"[{'a'='b'},{'a'='b'}]";
JArray arrayObject = JArray.Parse(alpha);
foreach (var item in arrayObject)
{
    obj["object"].Last.AddAfterSelf(item);
}
票数 0
EN

Stack Overflow用户

发布于 2021-01-03 09:47:52

Brent接受的答案已经很好地揭示了问题的原因,然而,通过对象到字符串然后字符串到对象的解决方案效率低下,没有使用JObject提供的功能。

代码语言:javascript
复制
class Container
{
  public int Number {get;set;}

  //Up to the client to deserialize to a strong type, like MyParamsType.
  public object Params {get;set;}
}

容器类被正确地反序列化了,但是,params出现在调试器中,带有两个大括号,所以我不能这样做:

代码语言:javascript
复制
  MyParamsType t = (MyType)container.params;

解决方案是

代码语言:javascript
复制
  var jObject = (Newtonsoft.Json.Linq.JObject)container.Params;
  MyParamsType p = jObject.ToObject<MyParamsType();
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41266503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档