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