使用RestSharp发布数据时序列化对象

时间:2011-07-19 20:27:27

标签: c# .net web-services rest restsharp

我最近开始使用RestSharp来使用使用XML的REST服务。

它将对象的反序列化从一个简单的自定义对象集合反序列化。但我的问题是,在回发到服务时,重新序列化的最佳方法是什么?

我应该使用LINQ-to-XML进行重新序列化吗?我尝试使用Serializeable属性和SerializeToXml实用程序函数,但是当我这样做时,似乎打破了RestSharp执行的反序列化。

4 个答案:

答案 0 :(得分:4)

我已经能够使用属性来获得我需要的所有内容,尽管我的情况相对简单。例如,要让它反序列化带有破折号的节点,然后能够序列化到我使用的相同节点名称:

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

因此,在您的示例中,序列化不尊重[XmlElement("elementName")]。相反,您需要使用[SerializeAs(Name = "elementName")]

我通过浏览RestSharp项目中的测试代码找到了这个。

答案 1 :(得分:2)

在查看RestSharp的源代码后,我发现它们实际上有System.Xml.Serialization.XmlSerializer名为DotNetXmlSerializer的内置包装器,默认情况下它不会被使用。要使用它,只需添加以下行:

var request = new RestRequest();
request.RequestFormat = RequestFormat.Xml;
request.XmlSerializer = new DotNetXmlSerializer();
request.AddBody(someObject);

答案 2 :(得分:1)

在最近的一个项目中,我使用XElement(来自System.Xml.Linq程序集)来手动构建我的请求。我只有一些属性可以处理。 RestSharp解决了从服务器反序列化大型XML图响应的真正问题。

如果您的对象模型与XML模式不同,则必须创建另一个对象模型,并映射到该模型,以便可以使用某个库自动序列化。在这种情况下,您可能最好手动映射到架构。

答案 3 :(得分:1)

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