Я пытаюсь разобрать ответ от службы OData REST. Когда ответ находится в формате JSON, легко использовать метод ReadAsJsonDataContract
из стартового набора WCF REST. Однако кажется, что все сложнее, если ответ является фидом Atom. Это пример:Как десериализовать объект из корма OData 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 m: свойства?
Vitek, благодарю вас за ответ. У меня есть служебная ссылка на мою службу OData, и она отлично работает с LINQ, поэтому мне даже не нужно вручную использовать DataContractSerializer в моем приложении. Так что это в основном для моей любопытства: в случае, если я хочу иметь полный контроль и десериализацию объектов из JSON или полезной нагрузки AtomPub, как мне это сделать? Мне удалось добиться этого с помощью JSON, но Atom-канал кажется более сложным, потому что он не использует исходную схему. Возможно, нет простого способа перестроить объект из такого фида, не пройдя через каждое отдельное поле? –
Я вижу, в настоящее время я не знаю простого способа сделать это с помощью загрузок ATOM. Материализатор клиентской библиотеки иногда близок, но он приносит, вероятно, больше сложности, чем вы хотите. Поэтому, если вам действительно нужно это сделать, то ваш лучший парсер, основанный на некоторой библиотеке синтаксического анализа XML (XLinq легко). –
Я вижу. Тогда, я думаю, я буду придерживаться стандартных вариантов: используя LINQ или Json. –