Silverlight

 Silverlight 帮助文档中的。

在 Silverlight 中使用 JSON 数据

基于 HTTP 的 Web 服务经常使用 JavaScript 对象表示法 (JSON) 消息向客户端返回数据。JSON 对象在 JavaScript 中可以方便地实例化,不需要分析逻辑,这使它成为方便的 Web 应用程序消息格式。

假定按照如何:对基于 http 的服务发出请求中描述的方法向基于 HTTP 的 Web 服务发出请求后,在 stream 类型的 responseStream 对象中返回了下列 JSON。

  复制代码
{"IsMember" : true, "Name" : "John", "Age" : 24}


使用 DataContractJsonSerializer
定义 User 类型来反序列化 JSON。

  复制代码
public class User
{
    public bool IsMember { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}



不需要将某个类型或该类型的具有特殊属性的成员标记为选择反序列化,因为所有 public 成员都自动包括在数据协定中。这是数据协定编程模型的简化版本,该模型要求为要包括在数据协定中的每个成员附加 datamemberattribute 属性,并为每个类型附加 datacontractattribute 属性。当前编程模型启用成员的名称和可见性来决定它是否序列化。有关更多信息,请参见 "silverlight 序列化"。

下列代码显示如何创建 datacontractjsonserializer 的实例,并使用它将 responseStream 反序列化为 User 对象。

  复制代码
DataContractJsonSerializer serializer =
    new DataContractJsonSerializer(typeof(User));
User user = (User)serializer.ReadObject(responseStream);

bool isMember = user.IsMember;
string name = user.Name;
int age = user.Age;



使用 JsonObject 和 LINQ
Silverlight 提供了 jsonprimitive、jsonarray 和 jsonobject 类型,这些类型允许您以弱类型方式处理 JSON。此方法允许您动态地访问基元 JSON 类型(string、number、Boolean)的值,并索引为结构化 JSON 类型(object 和 array),而不需要预定义反序列化的目标类型(例如 User 类型)。下列代码演示如何执行此操作。

  复制代码
JsonObject user = (JsonObject)JsonObject.Load(responseStream);
bool isMember = user["IsMember"];
string name = user["Name"];
int age = user["Age"];



使用 JsonObject 和 LINQ 可以方便地处理复杂的 JSON 对象。例如,假定在 Stream 类型的 responseStream 对象中包含下列 JSON。

  复制代码
[{"IsMember" : true, "Name" : "John", "Age" : 24},
{"IsMember" : false, "Name" : "Paul", "Age" : 44},
{"IsMember" : true, "Name" : "George", "Age" : 12}]



若要检索作为成员的所有人员,请对 JsonArray 对象使用以下 LINQ 查询。

  复制代码
JsonArray users = (JsonArray)JsonArray.Load(responseStream);

var members = from member in users
              where member["IsMember"]
              select member;

foreach (JsonObject member in members)
{
  string name = member["Name"];
  int age = member["Age"];

  // Do something...

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值