2014-05-19 49 views
1

我从https://demoapi.thismoment.com/v4.1/api/content阅读DynamicJsonArray剃刀(mvc4一把umbraco)

阅读的Json读它作为流:

Stream stream = wc.OpenRead(url); 
using (StreamReader reader = new StreamReader(stream)) 
{ 
String request = reader.ReadToEnd(); 
var requestJson = @Json.Decode(request); 

,并取得成果

var resultsList = new List<dynamic>(requestJson.results); 

的列表当试图读取下一级

var resultsList = new List<dynamic>(requestJson.results.media); 

我收到此错误:System.ArgumentNullException:值不能为空。

当我通过列表

foreach (var item in resultsList) 
{ 
<a>@item.media</a> 
} 

各媒体产品System.Web.Helpers.DynamicJsonArray迭代。

我需要读这个数组,所以我可以得到每个图像的网址和大小。

上面的json网址是公开的。 我在Umbraco 7中使用剃须刀代码(aps mvc 4)。

回答

1

您可以使用下面的方法来做到这一点:

private static List<T> GetcollectionFromJason<T>(string jasonUrl) where T : new() 
     { 
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(jasonUrl); 
      List<T> retCollection = new List<T>(); 
      try 
      { 
       WebResponse response = request.GetResponse(); 
       using (Stream responseStream = response.GetResponseStream()) 
       { 
        if (responseStream != null) 
        { 
         StreamReader reader = new StreamReader(responseStream, Encoding.UTF8); 
         string jsonString = reader.ReadToEnd(); 
         JavaScriptSerializer serializer = new JavaScriptSerializer(); 
         retCollection = serializer.Deserialize<List<T>>(jsonString); 

        } 
       } 
      } 
      catch (WebException exp) 
      { 
       WebResponse errorResponse = exp.Response; 
       using (Stream responseStream = errorResponse.GetResponseStream()) 
       { 
        if (responseStream != null) 
        { 
         StreamReader reader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8")); 
         String errorText = reader.ReadToEnd(); 
        } 
       } 
      } 

      return retCollection; 
     } 

,并呼吁它,你可以有这样的:

List<YourModel> technicalIssues = GetcollectionFromJason<YourModel>(YourJsonUrl); 
+0

感谢您与'JavaScriptSerializer'的例子。现在,我不知道如何告诉Umbraco的'@ Json.Decode()'返回一个继承'DynamicObject'并覆盖'TryGetProperty()'的类型。所以我最终会使用Serializer。 –

+0

我很高兴它帮助:) –