我有一个休息电话会返回此信息(使用Chrome中的Advance Rest Client进行测试):
MyObject: [22]
0: {
ID: "123456"
UTC1: "2013-04-19T03:12:32Z"
UTC2: "2013-04-19T03:12:36.994Z"
}
抓取响应并将其序列化为对象的代码如下所示:
IRestResponse<List<MyObject>> response = client.Execute<List<MyObject>>(request);
当我查看响应对象时,其中一个日期是错误的。如果我检查它或以任何方式使用这些物体,我得到这个:
UTC1: 4/19/2013 3:12
UTC2: 4/18/2013 9:12:36 PM <--CONVERTED!!
我需要将两者序列化为响应中返回的时间,而不是从UTC / GMT转换为本地时间。如上所示,一个值保持其UTC值,而另一个值转换为我的时区。我认为两者都是通过Convert.DateTime函数运行的,但如果我用字符串执行,则两个值都会转换为本地时间。我意识到原始值(正在转换的那个)之一并不完全符合ISO 8601格式(精度太高);不幸的是,这是我现在必须处理的数据。
有谁能告诉我如何强制RestSharp确保两个日期都是UTC?
答案 0 :(得分:7)
使用Json.NET进行反序列化,而不是使用内置的RestSharp反序列化器。
response = client.Execute(request);
var myObjects = JsonConvert.Deserialize<List<MyObject>>(response)
答案 1 :(得分:1)
为方便起见,发布此内容:
private class CustomRestClient : RestClient
{
public CustomRestClient(string baseUrl) : base(baseUrl) { }
private IRestResponse<T> Deserialize<T>(IRestRequest request, IRestResponse raw)
{
request.OnBeforeDeserialization(raw);
var restResponse = (IRestResponse<T>)new RestResponse<T>();
try
{
restResponse = ResponseExtensions.toAsyncResponse<T>(raw);
restResponse.Request = request;
if (restResponse.ErrorException == null)
{
restResponse.Data = JsonConvert.DeserializeObject<T>(restResponse.Content);
}
}
catch (Exception ex)
{
restResponse.ResponseStatus = ResponseStatus.Error;
restResponse.ErrorMessage = ex.Message;
restResponse.ErrorException = ex;
}
return restResponse;
}
public override IRestResponse<T> Execute<T>(IRestRequest request)
{
return Deserialize<T>(request, Execute(request));
}
}
这是一个简单的代码,我只是覆盖了Execute<T>
并使用了Json.net。