我有一个ASP.NET MVC应用程序。我试图从我的应用程序中的控制器点击外部Web服务。目前,我正在点击这样的网络服务:
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(baseAddress);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = await client.GetAsync(GetServiceUrl());
dynamic data = System.Web.Helpers.Json.Decode(...)
}
Web服务的结果可以在JSON中有三种不同的模式。它们看起来像这样;
架构1
{
"request":"some info",
"value": [
{"id":1, name:"bill" },
{"id":2, name:"john" }
]
}
架构2
{
"request":"some info",
"value": [
{ "orderId":"A12345", orderDate:"10-12-2014" },
{ "orderId":"B31234", orderDate:"11-01-2014" },
{ "orderId":"C36512", orderDate:"12-03-2014" },
]
}
架构3
{
"request":"some info",
"value": [
{ "productId":"11-22-33", "name":"ball", "description":"a round thing" },
{ "productId":"3A-12-52", "name":"tire", "description":"keeps you moving" },
{ "productId":"7D-xy-23", "name":"plate", "description":"something to eat off of." },
]
}
如果可能的话,我想避免写三个单独的课程。我真的只想做两件事:1)计算value
数组中的对象数。 2)循环遍历value
数组中的对象,并通过Razor打印出一些值。
我可以在不创建3个新类的情况下完成这两件事吗?如果是这样,怎么样?
感谢你!
答案 0 :(得分:1)
假设您使用的是json.net
,则可以使用JObject
和JArray
。
var json = @"{'value': [ { 'id' : 1}, { 'id' : 2 } ]}";
var jObject = JObject.Parse(json);
var values = (JArray) jObject["value"];
Console.WriteLine("Number of items: {0}", values.Count);
foreach (var value in values)
{
// do something with value.
}
如果您不使用json.net,可以使用Robert Harvey的建议并使用JavaScriptSerializer
。
var jsonDict = serializer.Deserialize<IDictionary<string, object>>(json);
var array = (IEnumerable<object>) jsonDict["value"];