使用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);