我正在尝试解析来自OData REST服务的响应。当响应采用JSON格式时,可以很容易地使用WCF REST入门工具包中的ReadAsJsonDataContract
方法。但是,如果响应是Atom提要,事情似乎会更复杂。这是一个例子:
<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
<entry xml:base="http://localhost:64172/BookshopService.svc/" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom">
<id>http://localhost:64172/BookshopService.svc/Books(89)</id>
<title type="text"></title>
<updated>2010-11-08T09:44:21Z</updated>
<author>
<name />
</author>
<link rel="edit" title="Books" href="Books(89)" />
<link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/OrderLines" type="application/atom+xml;type=feed" title="OrderLines" href="Books(89)/OrderLines" />
<category term="BookshopModel.Books" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
<content type="application/xml">
<m:properties>
<d:Id m:type="Edm.Int32">89</d:Id>
<d:Author>Martin Fowler</d:Author>
<d:Title>Analysis Patterns</d:Title>
<d:Price m:type="Edm.Decimal">50.20</d:Price>
</m:properties>
</content>
</entry>
因此实际对象在“content / m:properties”元素中被序列化。当然,DataContractSerializer
无法处理需要不同架构的内容。
有谁知道可以用什么技术反序列化OData atom m:properties元素的内容?
答案 0 :(得分:3)
WCF数据服务有一个客户端,可用于使用响应并从中获取CLR对象。查看System.Data.Services.Client.DataServiceContext
类和所有相关类。
实际上,在VS中,您可以向OData服务“添加服务引用”,它将为服务生成客户端类,并为DataServiceContext
生成派生类供您使用。
如果您已有客户端类,则可以使用DataServiceContext.Execute<T>
方法发出任何查询并将其结果具体化为客户端类型。