我有一个以大括号"{}“开头和结尾的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在反序列化时继承额外的花括号?
发布于 2017-06-01 21:22:42
这是一个问题,还是你只是好奇?当我在另一个容器类中作为"object“类型发送数据时,我也遇到了同样的问题。容器本身被正确地反序列化了,但是里面的对象却没有被反序列化。我认为它没有反序列化它,因为有双花括号。实际上,这看起来可能就是JObjects的样子。真正的原因可能是因为我关闭了它发送类型信息的设置,因为我是反序列化到"object“的,所以它不可能仅从字符串就知道类型是什么。
无论哪种方式,我注意到如果你对它做了".ToString()“,那么双花括号就会消失。这意味着我能够通过简单的操作来解决我的问题:
var someType = JsonConvert.DeserializeObject<SomeType>(jObject.ToString());我不确定这是不是一个bug,但我猜这只是一个内部实现细节,这就是为什么当你".ToString()“时他们会”修复“它。
发布于 2019-07-30 15:49:43
在我的情况下,我想
"object" : {
[
{"a"="b"},
{"a"="b"},
{"a"="b"},
[
{"a"="b"},
{"a"="b"}
]
]
}
To
"object" : {
[
{"a"="b"},
{"a"="b"},
{"a"="b"},
{"a"="b"},
{"a"="b"}
]
}我使用foreach非常简单,如下所示
alpha = @"[{'a'='b'},{'a'='b'}]";
JArray arrayObject = JArray.Parse(alpha);
foreach (var item in arrayObject)
{
obj["object"].Last.AddAfterSelf(item);
}发布于 2021-01-03 09:47:52
Brent接受的答案已经很好地揭示了问题的原因,然而,通过对象到字符串然后字符串到对象的解决方案效率低下,没有使用JObject提供的功能。
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出现在调试器中,带有两个大括号,所以我不能这样做:
MyParamsType t = (MyType)container.params;解决方案是
var jObject = (Newtonsoft.Json.Linq.JObject)container.Params;
MyParamsType p = jObject.ToObject<MyParamsType();https://stackoverflow.com/questions/41266503
复制相似问题