【问题标题】:Read DynamicJsonArray with razor (mvc4 Umbraco)用剃刀读取 DynamicJsonArray (mvc4 Umbraco)
【发布时间】:2014-05-19 17:05:49
【问题描述】:

我正在阅读来自https://demoapi.thismoment.com/v4.1/api/content的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: Value cannot be null。

当我遍历列表时

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

每个媒体项都是System.Web.Helpers.DynamicJsonArray

我需要读取这个数组,所以我可以得到每张图片的url和大小。

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

【问题讨论】:

    标签: json asp.net-mvc-4 razor umbraco umbraco7


    【解决方案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);
    

    【讨论】:

    • 感谢JavaScriptSerializer 的示例。现在,我不知道如何告诉 Umbraco 的 @Json.Decode() 返回一个继承 DynamicObject 并覆盖 TryGetProperty() 的自己的类型。所以我最终会使用你展示的序列化器。
    • 我很高兴它有帮助:)
    猜你喜欢
    • 2013-04-04
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多