7

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

它将对象从 XML 反序列化为自定义对象的集合变得微不足道。但我的问题是,在发回服务时重新序列化的最佳方式是什么?

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

4

4 回答 4

4

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

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

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

我通过浏览 RestSharp 项目中的测试代码发现了这一点。

于 2012-05-23T19:39:28.693 回答
3

在查看了 RestSharp 的源代码后,我发现他们实际上有一个内置的System.Xml.Serialization.XmlSerializernamed包装器DotNetXmlSerializer,它只是默认不使用。要使用它,只需添加以下行:

var request = new RestRequest();
request.RequestFormat = RequestFormat.Xml;
request.XmlSerializer = new DotNetXmlSerializer();
request.AddBody(someObject);
于 2016-11-23T19:17:26.677 回答
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
于 2011-07-19T21:57:53.517 回答
1

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

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

于 2011-07-19T21:25:14.377 回答