簡體   English   中英

在ASP.net C#中從JSON檢索數組

[英]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

另一種可能性是將對象JObjectJObject ,然后將數組作為屬性獲取-檢索到的對象自動為JToken類型,從而允許迭代:

var array = ((JObject)dynamicObject)["array"];
foreach (var item in array)
{
    Console.WriteLine(item.ToString());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM