RestSharp-XmlSerializer未使用DateFormat属性

本文关键字:属性 DateFormat 未使用 RestSharp-XmlSerializer | 更新日期: 2023-09-27 18:23:34

我遇到了RestSharp库的问题。默认情况下,它使用格式dd/MM/yyyy HH:mm:ss序列化DateTime对象。这在我的WCF服务中不太好用,它似乎只接受yyyy-MM-ddTHH:mm:ss,所以我尝试用request.DateFormat = "yyyy-MM-ddTHH:mm:ss更改请求的序列化。

即使设置正确,该属性似乎对序列化没有任何影响。至少在使用默认RestSharp.Serializers.XmlSerializer。如果我尝试使用DotNetXmlSerializer,DateFormat可以工作,但序列化程序没有包含我的XMLNS链接,并添加了版本&xml输出的编码行,其中一个或两个也与WCF服务不兼容。

有人对XmlSerializer有什么意见吗?

以下是相关的代码块:

var req = new RestRequest(endpoint, Method.POST);
req.RequestFormat = DataFormat.Xml;
//req.XmlSerializer = new DotNetXmlSerializer();
req.XmlSerializer = new XmlSerializer();
req.DateFormat = DATE_FORMAT;
req.AddBody(model, XMLNS);

其中private const string DATE_FORMAT = "yyyy-MM-ddTHH:mm:ss"XMLNS是WCF请求中使用的URL(取自端点/帮助文档)。

RestSharp-XmlSerializer未使用DateFormat属性

看起来RestRequest.DateFormat仅在反序列化时使用:

    /// <summary>
    /// Used by the default deserializers to explicitly set which date format string to use when parsing dates.
    /// </summary>
    public string DateFormat { get; set; }

对于序列化,您需要在序列化程序上显式设置它:

    req.XmlSerializer = new XmlSerializer { DateFormat = DATE_FORMAT };

请注意,根据这个答案,对于DotNetXmlSerializer,底层System.Xml.Serialization.XmlSerializer不支持自定义DateTime格式。