`
gstarwd
  • 浏览: 1511163 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

SilverLight学习笔记--Silverligh之Json的通讯传递

阅读更多

 还是原文看的比较清楚。http://www.cnblogs.com/wsdj-ITtech/archive/2009/08/27/1554787.html

 

   JSON是一种轻量级的数据传输类型,它可以通过序列化把一个简单对象转换为一个简单的字符串,在网络中进行传输,然后在客户端进行反序列化,得到原始对象.功能上和XML差不多,只是它的体积小,在客户端解析方便,所以被广泛使用.
   我们可以使用Silverlight提供的三个类来完成JSON数据的传递和接收。它们是:   

<!-- <br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->      1 、DataContractJsonSerializer (位于 System.Runtime.Serialization.Json)
      
2 、JsonObject (位于System.Json,将JSON数据流转换成为可读写的对象)
      
3 、JsonArray (位于System.Json, 对JSON数据流转换成为JsonObject数组形式,可支持LINQ查询)

     注: 如果要引用System.Runtime.Serialization.Json名空间里的Json,则必须也引用System.ServiceModel,否则Json会无法使用。在本例中,我们将使用它来进行示例。
     下面我们一起来学习在Silverlight中如何从服务器端向客户端传递Json数据。  
     新建一个Silverlight应用程序。命名为:SLJson
 (一)准备工作
  在这里,我们完成三种情况的Json数据传递。

<!-- <br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->    1 、一个Person类(其属性均为简单类型:String类型)
   
2 、Customers类,它是Person类的一个List。
   
3 、一个PersonT类(它包含另一个类 Address)

  我们要传递这三种情况的类对象实例到客户端并显示出来。
  所以,在此,我们首先要在服务器端和客户端分别建立上面的三个类。
  Person类
  服务器端代码定义如下:


<!-- <br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Web;
using  System.Runtime.Serialization; // 要引用System.Runtime.Serialization.Dll才能使用[DataContract]与[DataMember]属性

namespace  SLJson.Web
{
    [DataContract]
    
public   class  Person
    {
        [DataMember]
        
public   string  Name {  get set ; }
        [DataMember]
        
public   int  Age {  get set ; }
        [DataMember]
        
public   string  Address {  get set ; }
    }
}

  客户端代码定义如下:


<!-- <br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->using  System;
using  System.Net;
using  System.Windows;
using  System.Windows.Controls;
using  System.Windows.Documents;
using  System.Windows.Ink;
using  System.Windows.Input;
using  System.Windows.Media;
using  System.Windows.Media.Animation;
using  System.Windows.Shapes;

namespace  SLJson
{
    
public   class  Person
    {
        
public   string  Name {  get set ; }
        
public   int  Age {  get set ; }
        
public   string  Address {  get set ; }
    }
}

  Customers类
  服务器端代码定义如下:


<!-- <br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Web;

using  System.Runtime.Serialization;  // 要引用System.Runtime.Serialization.Dll才能使用[DataContract]与[DataMember]属性

namespace  SLJson.Web
{
    [DataContract]
    
public   class  Customers
    {
        [DataMember]
        
public  List < Person >  Persons {  get set ; }

    }
}

  客户端代码定义如下:


<!-- <br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->using  System;
using  System.Net;
using  System.Windows;
using  System.Windows.Controls;
using  System.Windows.Documents;
using  System.Windows.Ink;
using  System.Windows.Input;
using  System.Windows.Media;
using  System.Windows.Media.Animation;
using  System.Windows.Shapes;
using  System.Collections.Generic;  // 要引入此空间以使用List

namespace  SLJson
{
    
public   class  Customers
    {
        
public  List < Person >  Persons {  get set ; }
    }
}

  PersonT类


  服务器端代码定义如下:


<!-- <br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Web;
using  System.Runtime.Serialization; // 要引用System.Runtime.Serialization.Dll才能使用[DataContract]与[DataMember]属性

namespace  SLJson.Web
{

        [DataContract]
        
public   class  PersonT
        {
            [DataMember]
            
public   string  Name {  get set ; }
            [DataMember]
            
public   int  Age {  get set ; }
            [DataMember]
            
public  Address Address {  get set ; }

         }
}

  客户端代码定义如下:


<!-- <br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->using  System;
using  System.Net;
using  System.Windows;
using  System.Windows.Controls;
using  System.Windows.Documents;
using  System.Windows.Ink;
using  System.Windows.Input;
using  System.Windows.Media;
using  System.Windows.Media.Animation;
using  System.Windows.Shapes;

namespace  SLJson
{
    
    
public   class  PersonT
    {
     
        
public   string  Name {  get set ; }
     
        
public   int  Age {  get set ; }
    
        
public  Address Address {  get set ; }

    }
}

  PersonT类内含的Address类
  服务器端代码定义如下:


<!-- <br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Web;

using  System.Runtime.Serialization; // 要引用System.Runtime.Serialization.Dll才能使用[DataContract]与[DataMember]属性

namespace  SLJson.Web
{
    [DataContract]
    
public   class  Address
    {
        [DataMember]
        
public   string  country {  get set ; }

        [DataMember]
        
public   string  city {  get set ; }

    }
}

  客户端代码定义如下: 


<!-- <br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->using  System;
using  System.Net;
using  System.Windows;
using  System.Windows.Controls;
using  System.Windows.Documents;
using  System.Windows.Ink;
using  System.Windows.Input;
using  System.Windows.Media;
using  System.Windows.Media.Animation;
using  System.Windows.Shapes;


namespace  SLJson
{
    
public   class  Address
    {
        
public   string  country {  get set ; }
        
public   string  city {  get set ; }

    }
}

  至此,我们的应用程序如下图:
                        
 (二) 实现Json数据的传递。

  1、建立用户界面
 Page.xaml代码如下:

 

<!-- <br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->< UserControl x:Class = " SLJson.Page "
    xmlns
= " http://schemas.microsoft.com/winfx/2006/xaml/presentation "  
    xmlns:x
= " http://schemas.microsoft.com/winfx/2006/xaml "  
    Width
= " 400 "  Height = " 400 " >
 
< StackPanel Width = " 400 "  Height = " 400 "  Background = " Wheat " >
     
< TextBlock Text = " 获取的数据如下 "  TextAlignment = " Center "  Foreground = " Red "  Margin = " 2 "  FontSize = " 16 " ></ TextBlock >
     
< ListBox x:Name = " lstReturn "  Width = " 350 "  Height = " 220 "  Margin = " 6 " ></ ListBox >
     
< Button  x:Name = " btnGetPerson "  Width  = " 200 "  Height = " 25 "  Content = " 获取Person类数据 "  Margin = " 8 "   Click = " btnGetPerson_Click "   ></ Button >
     
< Button  x:Name = " btnGetPersonT "  Width = " 200 "  Height = " 25 "  Content = " 获取PersonT类数据 "  Margin = " 8 "  Click = " btnGetPersonT_Click " ></ Button >
     
< Button  x:Name = " btnGetCustomer "  Width = " 200 "  Height = " 25 "  Content = " 获取Customer类数据 "  Margin = " 8 "  Click = " btnGetCustomer_Click " ></ Button >
     
 
</ StackPanel >
</ UserControl >

 用户界面如下图:

                          
2、服务器端:我们新建一个Handler(在本例命名为:CustomerJsonHandler.ashx)专门负责响应客户端发来的请求,在服务器端生成Json格式的结果数据并返回给客户端。

  2.1、生成将要传递的类对象实例


<!-- <br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->         获取需要返回的数据Person #region  获取需要返回的数据Person
        
public  Person GetRetDataPerson()
        
{
            Person PWang 
=   new  Person()  { Name  =   " WangXiangMin " , Age  =   25 , Address  =   " China "  } ;

            
return  PWang;
        }


        
#endregion


        
获取需要返回的数据Customers(Person类数组) #region  获取需要返回的数据Customers(Person类数组)
        
public  Customers GetRetDataCustomers()
        
{
            Customers myCustomer 
=   new  Customers();

            Person PWang 
=   new  Person()  { Name  =   " WangXiangMin " , Age  =   25 , Address  =   " China "  } ;
            Person PJack 
=   new  Person()  { Name  =   " Jack " , Age  =   18 , Address  =   " USA "  } ;
            Person PTom 
=   new  Person()  { Name  =   " Tom " , Age  =   32 , Address  =   " OZ "  } ;

            List
< Person >  MyPersonList  =   new  List < Person >  
            
{
                PWang, 
                PJack, 
                PTom
             }
;

            myCustomer.Persons 
=  MyPersonList;
            
return  myCustomer;
        }


        
#endregion


        
获取需要返回的数据PersonT(其属性Address是另一个类Address) #region  获取需要返回的数据PersonT(其属性Address是另一个类Address)
        
public  PersonT GetRetDataPersonT()
        
{
            Address HongKongAddress 
=   new  Address()  { city  =   " HongKong " , country  =   " China "  } ;
            PersonT PWang 
=   new  PersonT()  { Name  =   " WangXiangMin " , Age  =   25 , Address = HongKongAddress} ;

            
return  PWang;
        }


        
#endregion

  2.2、并把它们序列化成Json格式的数据


<!-- <br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->             // 定义一个字符串存放序列化后的结果
             string  strJSON = "" ;

            
switch  (retType)
            {

                
// 返回Person类
                 case   " Person " : strJSON  =  SerializeToJsonString(GetRetDataPerson());   break ;

                
// 返回PersonT类
                 case   " PersonT " : strJSON  =  SerializeToJsonString(GetRetDataPersonT());   break ;

                
//  返回Person类数组Customer
                 case   " Customer " : strJSON  =  ToJson < Customers > (GetRetDataCustomers());  break ;
                 
            }

  2.3、向客户端传递

 

<!-- <br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->            context.Response.ContentType  =   " text/plain " ;
            context.Response.Write(strJSON);

服务器端CustomerJsonHandler.ashx全部代码如下:

 


<!-- <br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Web;


using  System.IO;
using  System.Text;
using  System.Runtime.Serialization.Json; // 需要引用 System.ServiceModel.DLL


http://www.c
分享到:
评论

相关推荐

    Silverlight_x64.exe

    此下载文件的版本:V5.150428.0 用于64位系统 Microsoft Silverlight是一个跨浏览器的、跨平台的插件,为网络带来下...Silverlight可以对运行在Mac或Windows上的主流浏览器提供高质量视频信息的快速、低成本的传递。

    Silverligh

    开发者可以通过查看这个Demo,学习如何将这三个技术有效地结合在一起,创建出一个可扩展、可维护且易于测试的Web应用程序。 在这个示例中,可能会有以下几个关键部分: 1. **模型层(Model)**:包含业务实体和...

    解决silverlight无法卸载的方法

     在升级silverlight 或者卸载的时候 提示找不到某个某个临时目录下的原始安装文件 从而无法卸载或升级新版本 微软公司真是没有考虑周全 谁会保存原始的临时文件目录 通常在某个temp目录中 中的原始安装包文件呢 ...

    Asp.net + Silverlight Socket多人聊天室源码版

    Silverlight Socket +Asp.net多人聊天室源码版,主要研究Socket通信,有程序包括客户端和服务端。  服务端:实例化Socket, 绑定, 监听, 连接, 接收数据, 发送数据等……  客户端:实例化Socket, 指定服务端地址,...

    基于Silverlight的文件管理示例程序

    通过学习和分析这些源代码,开发者可以深入理解如何在Silverlight环境中实现高效的文件操作,包括如何处理大文件上传、优化用户界面响应,以及如何与服务器进行安全的数据交换。此外,还可以了解到如何在Silverlight...

    SilverLight入门教程

    SilverLight入门教程是针对初学者的一份详尽指南,旨在帮助开发者理解并掌握SilverLight技术,特别是在ASP.NET运行环境中如何有效地运用。SilverLight是一种由微软开发的富互联网应用程序(RIA)平台,它允许开发者...

    反编译Silverlight项目

    本文主要介绍了如何反编译Silverlight项目,以供学习和研究之用,而不是鼓励非法盗取他人代码。Silverlight是一种由Microsoft开发的RIA(富互联网应用)技术,它允许开发者创建交互式的、图形丰富的Web应用程序。在...

    在silverlight中使用OpenFileDialog浏览本_地图.

    在探讨如何在Silverlight中使用OpenFileDialog浏览本地图片这一主题时,我们首先需要理解Silverlight的基本概念以及OpenFileDialog的功能和作用。Silverlight是Microsoft推出的一款跨浏览器、跨平台的插件,它允许...

    Silverlight Business Briefing

    ### Silverlight概述与关键技术知识点 #### 一、Silverlight简介 **Silverlight**是微软推出的一项跨...尽管随着时间的发展,Silverlight已经不再是最新的技术,但它在当时的创新性和影响力仍然值得我们学习和借鉴。

    silverlight 自定义进度条

    在Silverlight应用开发中,有时我们可能需要对默认的进度条控件进行自定义,以满足界面设计或功能上的特殊需求。"Silverlight 自定义进度条"是一个关于如何在Silverlight环境中创建美观且功能丰富的进度指示器的主题...

    WPF和Silverlight项目设计实例光盘源代码3

    通过学习和实践这些源代码,开发者不仅能理解WPF和Silverlight的核心概念,还能掌握如何在实际项目中运用这些技术,提升自己的开发能力。同时,这些实例也可以作为进一步探索这两个框架的起点,例如结合MVVM模式进行...

    WCF+Silverligh4t源码案例

    "Silverlight_With_WCF"这个压缩包文件很可能包含了实现WCF和Silverlight整合的示例代码,包括服务端的WCF服务实现、客户端的Silverlight应用代码以及相关的配置文件。通过研究这些示例,你可以更好地理解如何在实际...

    Silverlight_Bing_Maps地图插件

    Silverlight_Bing_Maps地图插件安装-CSDN

    使用silverligh编写的几个经典游戏

    《使用Silverlight编写...尽管现在Silverlight已逐渐淡出舞台,但其在游戏开发领域的实践经验仍值得学习和借鉴。通过理解这些游戏的实现机制,我们可以更好地理解Silverlight的技术特性和在富互联网应用中的应用价值。

    Silverligh应用:订单管理系统

    EVCombo for Silverlight套包是创建Silverlight程序所需的经典控件组合,涵盖了用户界面,图表,报表功能,可全面应用于Web程序的开发,不仅可以帮助用户创建功能丰富且视觉效果绚丽的用户界面,而且强大的图表报表...

    silverlight构建的图形化流程设计器

    silverlight构建的图形化流程设计器 该流程设计器应该具有以下的特点: 图形化的方式显示流程 支持拖拽创建和修改流程 导出图形对应的xml描述文件 根据流程xml描述文件显示流程图 活动类主要实现主要动作(函数...

Global site tag (gtag.js) - Google Analytics