首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Silverlight访问ashx JSON响应

Silverlight访问ashx JSON响应
EN

Stack Overflow用户
提问于 2009-08-14 22:26:03
回答 2查看 2.2K关注 0票数 3

我有一个Silverlight应用程序,它调用与Silverlight控件驻留在同一应用程序中的ashx。

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

代码语言:javascript
复制
// 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,所以我不喜欢它。

有什么帮助/建议吗?

使用Silverlight3,ASP.NET 3.5。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-08-15 04:42:19

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

链接:

  • Working with JSON Data on MSDN
  • JsonValue.Load on MSDN
  • Blog post with some sample code
票数 1
EN

Stack Overflow用户

发布于 2009-08-17 16:30:09

谢谢你的回复,乔恩。你的链接帮助我弄清楚了这个问题,我想我应该把我在这个问题中使用的代码包括进来,供将来遇到这个问题的其他人使用。

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

代码语言:javascript
复制
// 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语句中:

代码语言:javascript
复制
using (System.IO.Stream strResult = e.Result)
{
}

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

代码语言:javascript
复制
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的另一种可能方式是:

代码语言:javascript
复制
System.Runtime.Serialization.Json.DataContractJsonSerializer serializer =
    new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(List<SomeObject>));
List<SomeObject> lst = (List<SomeObject>)(serializer.ReadObject(strResult));

这两种方法最终都会得到我的对象列表,然后我可以在我认为合适的时候使用它。

谢谢你的帮助,乔恩!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1280495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档