【问题标题】:Silverlight access an ashx JSON responseSilverlight 访问 ashx JSON 响应
【发布时间】:2010-11-19 19:28:52
【问题描述】:

我有一个 Silverlight 应用程序正在调用与 Silverlight 控件在同一应用程序中托管的 ashx。

ashx 执行以下操作(精简):

// Basic object
class SomeObject
{
    int ID { get; set; }
    string Description { get; set; }
    double Value { get; set; }
}


// ASHX details
DataLayer dl = GetDataLayer();
List<SomeObject> lst = dl.ListObjects();
string result = "";
if (lst != null)
{
    JavaScriptSerializer serializer = new JavaScriptSerializer();
    result = serializer.Serialize(lst);
}
context.Response.ContentType = "application/json";
context.Response.Write(result);
context.Response.End();

现在我遇到的问题是如何处理 Silverlight 控件上的 ashx。

我希望调用 ashx,然后将 JSON 结果映射到我的内部 silverlight 对象中。似乎是一项非常简单的任务,但我不确定如何访问 ashx 或处理来自它的响应。由于 Silverlight 有一个精简版的 .NET,它让我大吃一惊。

有什么帮助/建议吗?

使用 Silverlight 3、ASP.NET 3.5。

【问题讨论】:

    标签: c# asp.net silverlight json ashx


    【解决方案1】:

    使用 System.Json 将字符串加载到 JsonArray 中。 JsonValue.Load() 接受响应流并可以填充 JsonArray - 从那里,您可以遍历或使用 LINQ 来查询值。

    链接:

    【讨论】:

      【解决方案2】:

      感谢乔恩的回复。您的链接帮助我弄清楚了,我认为我应该包含我在这个问题中使用的代码,以供将来遇到这个问题的其他人使用。

      处理 Json 的两种方式。对于这两种方法,您都需要设置一个处理程序来获取 Json 数据。

      // This gets the URL to call to get the Json data
      Uri uri = GetSomeUrl();
      WebClient downloader = new WebClient();
      downloader.OpenReadCompleted += new OpenReadCompletedEventHandler(downloader_OpenReadCompleted);
      downloader.OpenReadAsync(uri);
      

      然后您需要使用处理 Json 的代码来实现上面指定的事件处理程序downloader_OpenReadCompleted。在这两种情况下,下面的代码都应该包含在 using 语句中:

      using (System.IO.Stream strResult = e.Result)
      {
      }
      

      处理属于 Silverlight 框架一部分的 Json 数据的第一种方法是添加对 System.Json 的引用。

      JsonArray jsonArray = (JsonArray)JsonArray.Load(e.Result);
      List<SomeObject> lst = new List<SomeObject>();
      foreach (System.Json.JsonObject obj in jsonArray)
      {
          SomeObject obj = new SomeObject();
          obj.ID = int.Parse(obj["ID"].ToString();
          obj.Description = obj["Description"].ToString();
          obj.Value = double.Parse(obj["Value"].ToString());
          lst.Add(obj);
      }
      

      使用或不使用 Silverlight 的另一种方法是:

      System.Runtime.Serialization.Json.DataContractJsonSerializer serializer =
          new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(List<SomeObject>));
      List<SomeObject> lst = (List<SomeObject>)(serializer.ReadObject(strResult));
      

      这两种方法最终都会得到我的对象列表,然后我可以根据需要使用它。

      感谢乔恩的帮助!

      【讨论】:

        猜你喜欢
        • 2021-08-26
        • 1970-01-01
        • 2019-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        • 2020-09-29
        相关资源
        最近更新 更多