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

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

它使得从XML反序列化对象变得无关紧要。 但我的问题是,在回发到服务时重新排序的最佳方法是什么?

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

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

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

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

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

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

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

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 

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

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