【发布时间】:2018-03-28 09:57:25
【问题描述】:
我在以下对象之间的通信中遇到了日期时间属性问题:
- site#1 使用 RestSharp
- 和 site#2 使用 WebApi。
版本 1
站点#1
// SEND
var client = new RestClient(baseUrl);
var request = new RestRequest(serviceUrl, Method.POST);
var jsonBody = JsonConvert.SerializeObject(model);
request.AddParameter("text/json", jsonBody, ParameterType.RequestBody);
var result = client.Execute<T>(request);
// RECEIVE
var client = new RestClient(baseUrl);
var request = new RestRequest(serviceUrl, Method.GET);
var data = client.Execute<T>(request).Data
站点#2
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings =
new JsonSerializerSettings
{
DateFormatHandling = DateFormatHandling.IsoDateFormat,
DateTimeZoneHandling = DateTimeZoneHandling.Utc,
};
结果:
- 在站点#1 我发送 01.01.2018 12:00 AM
- 在站点#2 我正在接收 01.01.2018 12:00 AM
- 当 site#1 请求对象时,现在我收到:31.12.2017 11:00 PM
第 2 版 我尝试在站点#1 上使用不同的发送方式
request.AddJsonBody(model);
结果:
- 在站点#1 我发送 01.01.2018 12:00 AM
- 在站点 #2 我正在接收 31.12.2017 晚上 11:00
- 但是,如果我更正了站点#2 数据库中的值,则该值会正确地从站点#2 发送回站点#1(基本上与版本 #1 相反)
我什至在同一台机器、相同的文化、相同的时区进行此测试,但我当然想找到一个适用于不同时区的机器的解决方案。
【问题讨论】:
-
您需要分享将数据保存到site2数据库的代码。还请告诉我们您在 site1 上究竟是如何填充
model的? -
您在 site1 和 site2 上是否有相同的序列化程序设置(时区处理)。另外,你能检查一下site1序列化后日期的真实值吗?
标签: c# asp.net-web-api asp.net-web-api2 restsharp