我有一个客户端应用程序,可以在当地时间向Rest Api发送日期。一个示例日期是:
"2016-09-12T10:05:44.583694+02:00"
然后,Rest Api需要将这些日期在Utc中转发到SOAP服务,例如:
"2016-09-12T08:05:44Z"
我使用以下转换器将日期值从本地时间转换为Utc:
public class UtcDateTimeConverter : IsoDateTimeConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(DateTime);
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
if (value == null)
{
writer.WriteNull();
return;
}
writer.WriteValue(TimeZone.CurrentTimeZone.ToUniversalTime(DateTime.SpecifyKind((DateTime)value, DateTimeKind.Utc)));
}
}
上述转换器作为属性放置在POCO类的所有DateTime
属性上。这些类由客户端应用程序和Rest Api使用。
但是,转换器没有从本地转换为Utc。
我错过了什么?
答案 0 :(得分:0)
由于转换只应在服务器中进行,所以从客户端到服务器的序列化如下所示,使用一种需要一个或多个转换器的重载方法:
b
从soap服务反序列化到服务器时,同样适用:
JsonConvert.SerializeObject(request, Formatting.Indented, new UtcDateTimeConverter())
在自定义转换器中完成了以下更改:
JsonConvert.DeserializeObject<T>(message, new UtcDateTimeConverter())
此外,所有属性都已从所有 public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var date = (DateTime)value;
if (date.Kind == DateTimeKind.Utc)
{
writer.WriteValue(TimeZone.CurrentTimeZone.ToLocalTime(date));
}
else
{
writer.WriteValue(TimeZone.CurrentTimeZone.ToUniversalTime(date));
}
}
属性中删除。