Сериализация объекта при публикации данных с помощью RestSharp - PullRequest
7 голосов
/ 20 июля 2011

Я недавно начал использовать RestSharp для использования службы REST, которая использует XML.

Это делает десериализацию объектов из XML в коллекцию пользовательских объектов тривиальной.Но мой вопрос заключается в том, каков наилучший способ повторной инициализации при повторной публикации в службу?

Следует ли использовать LINQ-to-XML для повторной инициализации?Я пытался использовать атрибут Serializeable и служебную функцию SerializeToXml, но когда я это делаю, кажется, что это нарушает десериализацию, выполняемую RestSharp.

Ответы [ 4 ]

4 голосов
/ 23 мая 2012

Я смог использовать атрибуты, чтобы получить все, что мне нужно, хотя моя ситуация относительно проста.Например, чтобы заставить его десериализовать узлы с тире в них, а затем иметь возможность сериализации под тем же именем узла, я использовал это:

[XmlElement(ElementName = "short-name")]
[SerializeAs(Name = "short-name")]
public string shortName { get; set; }

Так что в вашем примере сериализация не учитывает[XmlElement("elementName")].Вместо этого вам нужно будет использовать [SerializeAs(Name = "elementName")].

. Я нашел это, пролистав тестовый код в проекте RestSharp.

3 голосов
/ 23 ноября 2016

Посмотрев исходный код RestSharp, я обнаружил, что у них на самом деле есть встроенная оболочка для System.Xml.Serialization.XmlSerializer с именем DotNetXmlSerializer, по умолчанию она просто не используется. Чтобы использовать его, просто добавьте следующую строку:

var request = new RestRequest();
request.RequestFormat = RequestFormat.Xml;
request.XmlSerializer = new DotNetXmlSerializer();
request.AddBody(someObject);
1 голос
/ 20 июля 2011

RestSharp поддерживает некоторую базовую сериализацию XML, которую вы можете переопределить при необходимости:

var request = new RestRequest();
request.RequestFormat = RequestFormat.Xml;
request.XmlSerializer = new SuperXmlSerializer(); // optional override, implements ISerializer
request.AddBody(person); // object serialized to XML using current XML serializer
1 голос
/ 20 июля 2011

В недавнем проекте я использовал XElement (из сборки System.Xml.Linq), чтобы вручную создавать свои запросы. У меня было только несколько свойств, чтобы иметь дело с этим. RestSharp решил реальную проблему - десериализацию ответов большого XML-графика с сервера.

Если ваша объектная модель отличается от XML-схемы, вам придется создать другую объектную модель и отобразить ее, чтобы она могла быть автоматически сериализована с использованием некоторой библиотеки. В этой ситуации вам может быть лучше вручную сопоставить схему.

...