假定按照 如何:对基于 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"];
}
(*)友情提示:Silverlight要是使用以上的类需要手动添加相关引用.
DataContractJsonSerializer (位于 System.Runtime.Serialization.Json)引用System.ServiceMode.Web
JsonObject (位于System.Json,将JSON数据流转换成为可读写的对象)
JsonArray (位于System.Json, 对JSON数据流转换成为JsonObject数组形式,可支持LINQ查询)
如果要引用System.Runtime.Serialization.Json名空间里的Json, 则必须也引用System.ServiceModel, 否则Json会无法使用。
<script type="text/javascript"></script>
分享到:
相关推荐
总结一下,这个例子展示了如何在Silverlight应用中使用异步调用获取服务器端的JSON数据,然后在客户端解析并显示这些数据。这对于开发需要实时更新数据的Web应用非常有用,例如动态图表、实时数据流等。理解和掌握这...
总的来说,Silverlight读取Excel并显示在DataGrid中涉及服务器端的文件读取和数据转换,以及客户端的数据接收和显示。通过适当的库和编程技术,我们可以构建一个高效且用户友好的Web应用来实现这一功能。
在开发基于Silverlight的...总的来说,Silverlight读取config文件并非直接操作本地文件,而是通过各种工作流和策略,如XAML资源字典、服务器加载或WCF服务。理解这些机制对于开发健壮且灵活的Silverlight应用至关重要。
5. **显示数据**:在Silverlight界面中,将接收到的数据展示在控件中,例如DataGrid。 **导出Silverlight数据到Excel** 1. **数据准备**:在Silverlight客户端,先将要导出的数据整理成合适的格式,可以是...
- 数据库存储和读取JSON格式的数据。 - 配置文件以JSON格式存储。 - 与JavaScript之间的数据转换。 6. 注意事项: - 版本兼容性:确保使用的Newtonsoft.Json版本与你的.NET框架兼容,否则可能会出现运行时错误...
对于那些你只从JSON获得价值不感兴趣的情况下,没有一个类来序列化或反序列化,或根本的JSON是从你的类的不同,您需要手动读取和写入,然后从你的对象的LINQ to JSON是你应该使用。到JSON允许你轻松地阅读,创建和...
2. **数据输入与读取**:当Silverlight应用需要处理来自GB2312编码的外部数据源(如XML、JSON或数据库)时,需要在读取数据时指定正确的编码。例如,使用`Encoding.GetEncoding("GB2312")`来创建一个GB2312编码的...
标签中提到了“数据库”,这表明自定义的DataTable可能还需要处理从数据库读取和写入数据的场景。开发者可能需要实现连接数据库、执行SQL查询、填充自定义DataTable以及将DataTable中的数据保存回数据库的方法。 ...
**Newtonsoft.Json 知识点详解** ...通过以上知识,开发者可以充分利用 `Newtonsoft.Json` 处理 JSON 数据,无论是在构建 RESTful API、存储/读取 JSON 文件,还是在 Web 服务之间交换数据,都能游刃有余。
`ESRI.ArcGIS.Client.dll`是Esri的ArcGIS客户端库,它提供了与ArcGIS Server进行通信的能力,使得在SilverLight应用中可以加载和操作服务发布的地图数据。这个库是连接ArcGIS Server和客户端应用的关键桥梁。 `...
- **配置文件**: 将配置数据存储为JSON文件,便于读取和编辑。 - **数据库操作**: JSON格式可以用于存储NoSQL数据库如MongoDB的数据,或者在关系型数据库中作为BLOB字段存储。 5. **最佳实践** - 性能优化:合理...
首先,为了在Silverlight应用中使用MySql,我们需要一个能够与MySql通信的数据提供者。通常,我们会使用ADO.NET Entity Framework或者MySql Data Provider for .NET。在这个例子中,我们可能使用后者,因为它是专门...
- 为了实现游戏的保存和加载,可以将当前游戏状态序列化为JSON或XML格式的文件,方便存储和读取。 - 提供保存进度的按钮和加载进度的选项,让用户能够随时继续游戏。 通过以上步骤,我们可以构建出一个完整的...
在这个“slwritetxtbyhandlerdemo”示例中,我们将探讨如何在Silverlight应用中通过Web Handler来读取和写入TXT文件。 首先,让我们了解什么是Web Handler(.ashx文件)。Web Handler是ASP.NET中的一种轻量级组件,...
5. 数据序列化:由于Silverlight的安全限制,数据传输通常需要使用XML或JSON格式。WCF可以通过配置选择合适的序列化器。 6. 处理返回数据:WCF服务返回的数据将在回调方法中处理,通常需要将返回的对象绑定到UI元素...
oData通过HTTP协议提供对数据源的访问,支持CRUD(创建、读取、更新和删除)操作,并使用AtomPub或JSON格式传输数据。在Silverlight中使用oData,开发者可以轻松地连接到任何支持oData的数据服务,例如Microsoft的...