[英]Deserialize json string with multiple objects
在調用 API 后,我有以下 JSON 響應:
{
"Item": "Some value",
"Status": "ST",
"Details": "something here...",
"TargetObject": [
{
"Value1": "1",
"Value2": [
{
"ABC1": "......",
"ABC2": "...",
"ABC3": "..."
}
],
"Value3": [
{
"ABCD1": "......",
"ABCD2": "...",
"ABCD3": [
{
"ABCVal": "123"
},
{
"Extra": "123"
}
]
}
]
}
]
}
我想要做的是從TargetObject返回值,但是這個鍵里面有多個對象/數組所以我的問題是:我怎樣才能只返回這些值並打印以下 JSON 結果:
{
"TargetObject": [
{
"Value1": "1",
"Value2": [
{
"ABC1": "......",
"ABC2": "...",
"ABC3": "..."
}
],
"Value3": [
{
"ABCD1": "......",
"ABCD2": "...",
"ABCD3": [
{
"ABCVal": "123"
},
{
"Extra": "123"
}
]
}
]
}
]
}
這是我嘗試過的:
public async Task<List<List<MyModel>>> GetAsync(string url)
{
/*
Code to get the above JSON
*/
//Trying to return the expected JSON
return JsonConvert.DeserializeObject<List<List<MyModel>>>(jsonString);
}
這是我的 Model:
public class MyModel
{
public string TargetObject { get; set; }
public string Value1 { get; set; }
public string Value2 { get; set; }
public string ABC1 { get; set; }
public string ABC2 { get; set; }
public string ABC3 { get; set; }
public string Value3 { get; set; }
public string ABCD1 { get; set; }
public string ABCD2 { get; set; }
public string ABCD3 { get; set; }
public string ABCVal { get; set; }
public string Extra { get; set; }
}
目前我收到以下錯誤:
Newtonsoft.Json.JsonSerializationException: Cannot deserialize the current JSON object (eg {"name":"value"}) into type 'System.Collections.Generic.List`1[myProjectNamespace.Models.MyModel]' because the type requires a JSON數組(例如 [1,2,3])正確反序列化。
動態object呢?
public async Task<dynamic> GetAsync(string url)
{
/*
Code to get the above JSON
*/
return Newtonsoft.Json.JsonConvert.DeserializeObject(res);
}
PS:安裝Newtonsoft.Json
如果您有強類型 JSON 那么您需要創建一些模型 (DTO) 來表示 JSON 的結構。 注意: ABCD3
在Value2
和Value3
中有不同的類型,您應該根據您的數據自行定義
public class Root
{
public List<TargetObject> TargetObject { get; set; }
}
public class TargetObject
{
public string Value1 { get; set; }
public List<Value2> Value2 { get; set; }
public List<Value3> Value3 { get; set; }
}
public class Value2
{
public string ABC1 { get; set; }
public string ABC2 { get; set; }
public string ABC3 { get; set; }
}
public class Value3
{
public string ABCD1 { get; set; }
public string ABCD2 { get; set; }
public List<ABCD3> ABCD3 { get; set; }
}
public class ABCD3
{
public string ABCVal { get; set; }
public string Extra { get; set; }
}
然后
return JsonConvert.DeserializeObject<Root>(jsonString);
如果您只需要將TargetObject
的內容作為string
獲取,請使用:
var jsonDoc = JsonDocument.Parse(jsonString);
var targetObject = jsonDoc.RootElement.GetProperty("TargetObject").GetRawText();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.