网络编程:XML、SOAP、JSON、RSS与Socket的综合应用
立即解锁
发布时间: 2025-08-13 03:16:13 阅读量: 8 订阅数: 8 

# 网络编程:XML、SOAP、JSON、RSS与Socket的综合应用
## 1. XML-RPC与Flickr图像搜索
当通过XML - RPC调用Flickr图像搜索时,会得到一个XML - RPC响应。若要获取之前使用的照片信息,需对消息调用`HttpUtility.HtmlDecode()`,再使用LINQ to XML过滤出`<photo>`元素。完整代码可参考相关示例。
使用`XDocument`和LINQ to XML可进行XML的读取和创建,这些技术在处理基于XML的Web服务时非常有用,也适用于其他XML处理场景。`XDocument`和`XElement`类有很多方法,可轻松修改XML文档,如`Add()`、`AddAfterSelf()`等。
## 2. 返回SOAP数据的服务
Silverlight能与.NET Web服务无缝协作,这些服务发送SOAP编码的数据。SOAP是XML的一种形式,理论上可使用Silverlight的XML处理(如`XDocument`类)创建请求消息和解析响应消息,但在Visual Studio中添加服务引用更为简便。此技术适用于任何基于SOAP的Web服务,Silverlight无法区分服务是否由.NET构建。添加Web引用时,Visual Studio会创建所需的代理类,包含异步方法和事件。
## 3. 返回JSON数据的服务
### 3.1 JSON概述
JavaScript对象表示法(JSON)是一种对象表示语法,有时作为XML的轻量级替代方案。当使用返回JSON数据且无SOAP替代方案的Web服务时,需使用JSON序列化器。Silverlight提供两种解析JSON数据的方式:使用JSON反序列化器或LINQ to JSON。在处理JSON数据前,需添加三个程序集引用:`System.Runtime.Serialization.dll`、`System.ServiceModel.dll`和`System.ServiceModel.Web.dll`。
### 3.2 反序列化JSON示例
以Yahoo!的图像搜索服务为例,其返回的JSON数据如下:
```json
{"ResultSet":{
"totalResultsAvailable":"957841",
"totalResultsReturned":10,
"firstResultPosition":1,
"Result":[
{
"Title":"tree_frog.jpg",
"Summary":"Red - Eyed Tree Frog",
"Url":"https:\/\/2.zoppoz.workers.dev:443\/http\/www.thekidscollege.com\/images\/animals\/redeyetree_frog.jpg",
...
},
{
"Title":"tree_frog_large - thumb.jpg",
"Summary":"Before I came back in though I got another shot of the frog.",
"Url":"https:\/\/2.zoppoz.workers.dev:443\/http\/www.silveriafamily.com\/blog\/john\/treefrog.jpg",
...
}
]
}}
```
为对这些数据进行建模,需创建相应的类:
```vb
Public Class SearchResults
Public ResultSet As SearchResultSet
End Class
Public Class SearchResultSet
Private _totalResultsAvailable As Integer
Public Property totalResultsAvailable() As Integer
...
End Property
Private _totalResultsReturned As Integer
Public Property totalResultsReturned() As Integer
...
End Property
Private _result As SearchResult()
Public Property Result() As SearchResult()
...
End Property
End Class
Public Class SearchResult
Private _title As String
Public Property Title() As String
...
End Property
Private _summary As String
Public Property Summary() As String
...
End Property
Private _url As String
Public Property Url() As String
...
End Property
End Class
```
反序列化步骤如下:
1. 创建`DataContractJsonSerializer`实例:
```vb
Dim serializer As New DataContractJsonSerializer(GetType(SearchResults))
```
2. 使用`ReadObject()`反序列化JSON数据:
```vb
Dim results As SearchResults = CType(serializer.ReadObject(jsonData), SearchResults)
```
以下是一个搜索图像的Silverlight页面代码示例:
```vb
Private Sub cmdGetData_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
Dim client As New WebClient()
Dim address As New Uri( _
"http://search.yahooapis.com/ImageSearchService/V1/imageSearch?" & _
"appid=YahooDemo&query=" & HttpUtility.UrlEncode(txtSearchKeyword.Text) & _
"&output=json")
AddHandler client.OpenReadCompleted, AddressOf client_OpenReadCompleted
client.OpenReadAsync(address)
End Sub
Private Sub client_OpenReadCompleted(ByVal sender As Object, _
ByVal e As OpenReadCompletedEventArgs)
Dim serializer As New DataContractJsonSerializer(GetType(SearchRes
```
0
0
复制全文
相关推荐










