2014-12-18 54 views
1

我有一個ASP.NET MVC應用程序。我試圖從我的應用程序中的控制器中打一個外部Web服務。目前,我打了Web服務這樣的:在C中使用動態類型與JSON#

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." }, 
    ] 
} 

我想AV oid儘可能寫出三個不同的課程。我真的只想做兩件事:1)計算value數組中的對象數。 2)遍歷value數組中的對象並通過Razor打印出一些值。

我可以在不創建3個新類的情況下做這兩件事嗎?如果是這樣,怎麼樣?

謝謝你!

+0

'Dictionary '是否足夠? http://stackoverflow.com/a/3981380 –

回答

1

假設您使用的是json.net,您可以使用JObjectJArray

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,你可以用羅伯特·哈維的建議去選擇JavaScriptSerializer

var jsonDict = serializer.Deserialize<IDictionary<string, object>>(json); 
var array = (IEnumerable<object>) jsonDict["value"];