[英]Remove double curly brackets from JObject that have been added during deserialization
我有一個以大括號“{}”開頭和結尾的 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()”時他們將它“修復”。
就我而言,我想要
"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);
}
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;}
}
容器類被正確反序列化,但是,參數出現在帶有雙大括號的調試器中,所以我不能這樣做:
MyParamsType t = (MyType)container.params;
解決辦法是
var jObject = (Newtonsoft.Json.Linq.JObject)container.Params;
MyParamsType p = jObject.ToObject<MyParamsType();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.