2014-05-19 53 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

我很高興它幫助:) –