Silverlight 如何访问 ashx 返回的 JSON 响应

3

我有一个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。
2个回答

1

0

感谢您的回复,Jon。您提供的链接帮助我解决了问题,我认为我应该在这个问题中包含我使用的代码,以便其他人在未来遇到类似问题时可以参考。

有两种处理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));

这两种方法最终都会帮我获取到一个对象列表,然后我可以根据需要使用它们。

感谢您的帮助Jon!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接