星辰.Net技术社区论坛

首页 » .NET » Silverlight » 在Silverlight中使用Json
admin - 2008-6-26 11:58:00
Silverlight提供了几个类来帮助我们方便地转换从WCF获取的JSON数据。它们是:íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
  íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
      DataContractJsonSerializer (位于 System.Runtime.Serialization.Json)íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
  íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
      JsonObject (位于System.Json,将JSON数据流转换成为可读写的对象)íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
  íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
      JsonArray (位于System.Json, 对JSON数据流转换成为JsonObject数组形式,可支持LINQ查询)íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    注:如果要引用System.Runtime.Serialization.Json名空间里的Json,则必须也引用System.ServiceModel,íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
否则Json会无法使用。íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
  íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    这三类以都支持Stream类型参数,而该参数就是从WCF获取的JSON数据流。使用它们也很简单,首先我们需íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
要建立一个AJAX型WCF,如下图:íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    因为我们是获取用户数据,所以将这个WCF命名为UserService.csíS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    然后对这个WCF做如下修改:íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    1.对SVC头文件添加WebServiceHostFactory,如下:íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
 
íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
<%@ ServiceHost Language="C#" Debug="true" Service="UserService"íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    Factory
="System.ServiceModel.Activation.WebServiceHostFactory"íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
%>íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    2.注释web.config中的enableWebScript节点,如下:íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
   
íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
<behavior name="UserServiceAspNetAjaxBehavior">íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
       
<!--<enableWebScript />-->íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
</behavior>íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
      íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    当然这里所用的WCF为,主要是为了支持形如下面的请求链接方式:íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    http://localhost:1514/Json_SilverlightWeb/UserService.svc/GetUseríS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    而下面就是WCF中的代码段:íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
[DataContract]íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
public class UserInfoíS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
{íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    [DataMember]íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
   
public string Name { get; set; }íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    [DataMember]íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
   
public string Address { get; set; }íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    [DataMember]íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
   
public int Age { get; set; }íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    [DataMember]íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
   
public bool IsMember { get; set; }íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
  íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
}íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
[ServiceContract(Namespace
= "")]íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
[AspNetCompatibilityRequirements(RequirementsMode
= AspNetCompatibilityRequirementsMode.Allowed)]íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
public class UserServiceíS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
{íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    List
<UserInfo> userList = new List<UserInfo>íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
        {íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
           
new UserInfo {Name = "赵二", Address = "北京", Age = 2, IsMember = true},íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
           
new UserInfo {Name = "张三", Address = "北京", Age = 3, IsMember = false},íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
           
new UserInfo {Name = "李四", Address = "北京", Age = 4, IsMember = true},íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
           
new UserInfo {Name = "王五", Address = "北京", Age = 5, IsMember = false},íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
        };íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    [OperationContract]íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    [WebGet(ResponseFormat
= WebMessageFormat.Json, UriTemplate = "GetUser")]íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
   
public UserInfo GetUser()íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    {íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
       
return new UserInfo() { Name = "张三", Address = "北京", Age = 3, IsMember = true };íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    }íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    [OperationContract]íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    [WebGet(ResponseFormat
= WebMessageFormat.Json, UriTemplate = "GetUserListByAge/{age}")]íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
   
public UserInfo GetUserListByAge(string age)íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    {íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
       
return (from u in userListíS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
               
where u.Age == int.Parse(age)íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
                select
new UserInfoíS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
                {íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
                    Age
= u.Age,íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
                    Name
= u.Name,íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
                    IsMember
= u.IsMember,íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
                    Address
= u.AddressíS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
                }).SingleOrDefault();íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    }íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    [OperationContract]íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    [WebGet(ResponseFormat
= WebMessageFormat.Json, UriTemplate = "GetUserList")]íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
   
public List<UserInfo> GetUserList()íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    {íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
       
return userList;íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    }íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
}
íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    上面代码中的方法:íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    GetUser() //对应DataContractJsonSerializer的调用演示íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    GetUserList(string age) //对应JsonObject的调用演示íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    GetAllUser() //对应JsonArray的调用演示íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    分别使用了WebGet属性(位于System.ServiceModel.Web),且ResponseFormat皆为WebMessageFormat.JsoníS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
(当然也支持WebMessageFormat.Xml)。而UriTemplate属性为该服务所支持的浏览器链接地址。íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    当对上面的WCF编译运行之后,我们在浏览器中输入下面地址:íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    http://localhost:1514/Json_SilverlightWeb/UserService.svc/GetUser //参见UriTemplate设置íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    则此时IE会弹出一个保存窗口,如下截图:íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    而保存到本地的文件内容如下:íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
   
íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
{"Address":"北京","Age":12,"IsMember":true,"Name":"张三"}íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
  íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    看来通过对上述链接的调用,WCF会直接将我们想要的用户信息转换成JSON格式。íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    注:另个两个链接及其返回JSON内容分别如下所示íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    http://localhost:1514/Json_SilverlightWeb/UserService.svc/GetUserListByAge/2íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
   
íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
{"Address":"北京","Age":2,"IsMember":true,"Name":"赵二"}íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    http://localhost:1514/Json_SilverlightWeb/UserService.svc/GetUserListíS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
   
íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
[{"Address":"北京","Age":2,"IsMember":false,"Name":"赵二"},íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    {
"Address":"北京","Age":3,"IsMember":false,"Name":"张三"},íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    {
"Address":"北京","Age":4,"IsMember":false,"Name":"李四"},íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    {
"Address":"北京","Age":5,"IsMember":false,"Name":"王五"}]//自动转成JSON数组íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    下面我们就来看一下Silverlight是何使用来解析上面传回来的JSON数据的.íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    首先看一下使用DataContractJsonSerializer的示例(详见注释):íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
private void GetUserToDataContract_Click(object sender, RoutedEventArgs e)íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
{íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    Uri serviceUri
= new Uri("http://localhost:1514/Json_SilverlightWeb/UserService.svc/GetUser");íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    WebClient webClient
= new WebClient();íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    webClient.OpenReadCompleted
+= new OpenReadCompletedEventHandler(webClient_OpenReadCompleted);íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    webClient.OpenReadAsync(serviceUri);íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
}    íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
  íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
{íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
   
//声明一个UserInfo类型的DataContractJsonSerializer实例íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(UserInfo));íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
   
//获取JSON数据流的信息,并将它转换成为UserInfo实例íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    UserInfo userInfo = (UserInfo)serializer.ReadObject(e.Result);//e.Result为JSON流数据íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
  íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
   
//下面显示userInfo中的数据信息íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    UserList.Items.Add(string.Format("Name:{0}, Address:{1}, Age:{2}, IsMember:{3} ",íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
        userInfo.Name,íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
        userInfo.Address,íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
        userInfo.Age,íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
        userInfo.IsMember));íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
}íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
  因为DataContractJsonSerializer支持将JSON转换成本地的对象类型,所以我们可以像使用普通对象实例íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
一样。其运行结果如下图所示:íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
  íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
  íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    看明白了这段代码之后,再看另两个JSON类的使用方法就简单多了。其DEMO代码如下:íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
private void GetUserToJsonObject_Click(object sender, RoutedEventArgs e)íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
{íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    Uri serviceUri
= new Uri("íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
            http://localhost:1514/Json_SilverlightWeb/UserService.svc/GetUserListByAge/2");íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    WebClient webClient_JsonObject = new WebClient();íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    webClient_JsonObject.OpenReadCompleted
+= íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
           
new OpenReadCompletedEventHandler(webClient_JsonObject_OpenReadCompleted);íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    webClient_JsonObject.OpenReadAsync(serviceUri);íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
}íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
void webClient_JsonObject_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
{íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    JsonObject jsonObject
= (JsonObject) JsonObject.Load(e.Result);//e.Result为JSON流数据íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
   
//下面获取JSON对象实例中的数据íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    UserList.Items.Add(string.Format("Name:{0}, Address:{1}, Age:{2}, IsMember:{3} ",íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
        jsonObject[
"Name"],íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
        jsonObject[
"Address"],íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
        jsonObject[
"Age"],íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
        jsonObject[
"IsMember"])); íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
}
íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
  íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
  其运行结果如下所示:íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
      íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
  íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    最后再看一下JsonArray, 这个类可以看成是JsonObject的一个集合,它支持LINQ查询,其DEMO代码如下:íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
private void GetUserToJsonArray_Click(object sender, RoutedEventArgs e)íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
{íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    Uri serviceUri
= new Uri("http://localhost:1514/Json_SilverlightWeb/UserService.svc/GetUserList");íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    WebClient webClient_JsonArray
= new WebClient();íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    webClient_JsonArray.OpenReadCompleted
+= íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
           
new OpenReadCompletedEventHandler(webClient_JsonArray_OpenReadCompleted);íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    webClient_JsonArray.OpenReadAsync(serviceUri);íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
}íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
        íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
void webClient_JsonArray_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
{íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    JsonArray users
= (JsonArray)JsonArray.Load(e.Result);//e.Result为JSON流数据íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    var userlist = from user in usersíS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
                 
where user["Age"] > 2íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
                  select user;íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
   
foreach (JsonObject jsonObject in userlist)íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    {íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
        UserList.Items.Add(
string.Format("Name:{0}, Address:{1}, Age:{2}, IsMember:{3} ",íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
        jsonObject[
"Name"],íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
        jsonObject[
"Address"],íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
        jsonObject[
"Age"],íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
        jsonObject[
"IsMember"])); íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    }íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
}íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    运行结果如下图所示:íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
      íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
    当然在JSON名空间下还有许多不错的类,如果大家有兴趣,我会在以后进行介绍:) íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi
íS ¾ £Hª;www.netcsharp.cnÅÑà’­×AŰi

附件: silverlight_json.rar
1
查看完整版本: 在Silverlight中使用Json