[英]Retrieving an array from JSON in ASP.net C#
我正在從Web API收集數據,該Web API返回復雜的JSON字符串。 它包含許多不同類型的值,一些數組和一些相當深的嵌套。
目前,我正在將字符串轉換為動態對象,如下所示:
dynamic dynamicObject = JsonConvert.DeserializeObject(jsonString);
然后,根據需要從該對象中檢索值並進行類型轉換,但是當我嘗試檢索數組時,此方法給出了空引用異常:
int myValue = (int)dynamicObject.foo.value; // Works!
int[] myArrayOfInts = (int[])dynamicObject.bar.values; // Null
由於我對C#和ASP.net相當陌生,因此我不確定該如何進行。 到目前為止,我遇到的大多數解決方案都需要創建小型的,類型嚴格的類,這些類反映整個JSON結構。 就我而言,最好使用一個動態對象,部分是為了簡單起見,部分是因為實際上只使用了某些值。
當我嘗試運行您的代碼時,出現RuntimeBinderException: Cannot convert type 'Newtonsoft.Json.Linq.JArray' to 'int[]'
。 您可以使用ToObject
進行此轉換。
dynamic dynamicObject = JsonConvert.DeserializeObject("{\"values\": [1, 3, 4]}");
int[] myArrayOfInts = dynamicObject.values.ToObject<int[]>();
強制轉換為int
之所以有效,是因為為許多類型(包括int
)定義了強制轉換,但int[]
卻沒有。
您可以使用ToObject<type>
擴展方法(其中type是所需的數據類型)反序列化數組:
var jsonString = @"{ ""name"":""test"", ""array"": [""10"",""20"",""30"",""40""] }";
dynamic dynamicObject = JsonConvert.DeserializeObject(jsonString);
Console.WriteLine(((string)dynamicObject.name));
var items = dynamicObject.array.ToObject<int[]>();
foreach (var item in items)
{
Console.WriteLine(item);
}
輸出為:
test
10
20
30
40
另一種可能性是將對象JObject
為JObject
,然后將數組作為屬性獲取-檢索到的對象自動為JToken
類型,從而允許迭代:
var array = ((JObject)dynamicObject)["array"];
foreach (var item in array)
{
Console.WriteLine(item.ToString());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.