【发布时间】:2014-11-12 16:59:32
【问题描述】:
当然,最新的 Restsharp 中的默认值应该能够序列化一个 `Datetime。
以下是我的请求构建
var request = new RestRequest(Method.POST);
request.RequestFormat = DataFormat.Json;
//request.JsonSerializer = new MyJsonSerializer(); // When applying JSON.Net serialisation
request.Resource = "SaveBooking";
request.AddHeader("Content-Type", "application/json");
request.AddBody(booking);
return Execute<bool>(request);
我已经尝试实现 JSON.NET Serializer 并与 restsharp as suggested in this question 集成,它链接到他们的笔记。但我也有同样的问题。
它正在构建的 JSON 如下:
"BookingDate": "2014-11-13T09:31:02.0667967+00:00",
"StartTime": "2014-11-13T10:30:00",
"EndTime": "2014-11-13T17:00:00",
在尝试反序列化时,我得到的错误如下所示。
DateTime content '2014-11-12T16:20:30.4635576Z' does not start with '\/Date(' and end with ')\/' as required for JSON.'.
很明显它没有序列化日期。但我不知道为什么。或者如何解决它。
我正在反序列化其余端点
[OperationContract]
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "/SaveBooking")]
Boolean SaveBooking(RoomBookingEntry Booking);
带参数
public class RoomBookingEntry
{
public DateTime BookingDate { get; set; }
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }
}
}
【问题讨论】:
-
您收到的错误消息与您提供的 JSON 不匹配 - 是否有空格?你是如何反序列化的?
-
@JonSkeet 它们具有相同的符号,但 json 是从同一事物的早期调试中保存的。又名,时代不匹配。我正在反序列化,如我的问题所附。
-
它们不一样——一个在日期/时间值中有空格(这很奇怪),另一个没有。值是否实际上看起来像
"2014-11-12T16: 34: 16.9681998Z"或"2014-11-12T16:34:16.9681998Z"? -
@JonSkeet 哦,我现在明白了。好的,我把第一个放在 Json 格式化程序中。所以也许它被编辑得很糟糕。第二个肯定是正确的,因为这是我回来的错误。我会仔细检查。
-
问题在于,在 JSON 中没有单一的“正确”方式来表示 DateTime。见hanselman.com/blog/…。我找不到任何说服 RestSharp 将
DateTime序列化为new Date(...)格式的方法...您可能想看看是否可以说服DataContractJsonSerializer接受 ISO-8601 格式...
标签: c# json serialization json.net restsharp