Я использую HTTPCLient для вызова службы RestFul. Моя проблема при разборе DateTime. Потому что в моем классе у меня есть свойство DateTime. В Json это тип long. Ключ Json: exp
{
"resultCodes": "OK",
"description": "OK",
"pans": {
"maskedPan": [
{
"id": "4b533683-bla-bla-3517",
"pan": "67*********98",
"exp": 1446321600000,
"isDefault": true
},
{
"id": "a3093f00-zurna-01e18a8d4d72",
"pan": "57*********96",
"exp": 1554058800000,
"isDefault": false
}
]
}
}
В документации я прочитал это Чтобы минимизировать использование памяти и количество объектов выделенный Json.NET поддерживает сериализацию и десериализацию непосредственно в поток.
So =>
СПОСОБ 1 (чтение через GetStringAsync). В документации написано, что вместо этого используйте StreamReader.
return Task.Factory.StartNew(() =>
{
var client = new HttpClient(_handler);
var url = String.Format(_baseUrl + @"list/{0}", sessionId);
BillsList result;
var rrrrr = client.GetStringAsync(url).Result;
result = JsonConvert.DeserializeObject<BillsList>(rrrrr,
new MyDateTimeConverter());
return result;
}, cancellationToken);
СПОСОБ 2 (Хороший способ. Я читаю через StreamReader. Bu в строке var rTS = sr.ReadToEnd (); он создает новую строку. Это нехорошо. Потому что я использовал GetStreamAsync, чтобы избежать создания строковой переменной.) < / сильный>
return Task.Factory.StartNew(() =>
{
var client = new HttpClient(_handler);
var url = String.Format(_baseUrl + @"list/{0}", sessionId);
BillsList result;
using (var s = client.GetStreamAsync(url).Result)
using (var sr = new StreamReader(s))
using (JsonReader reader = new JsonTextReader(sr))
{
var rTS = sr.ReadToEnd();
result = JsonConvert.DeserializeObject<BillsList>(rTS,
new MyDateTimeConverter());
}
return result;
}, cancellationToken);
СПОСОБ 3 (лучший. Но он дает исключение, если свойство DateTime в моем классе.)
return Task.Factory.StartNew(() =>
{
var client = new HttpClient(_handler);
var url = String.Format(_baseUrl + @"list/{0}", sessionId);
BillsList result;
using (var s = client.GetStreamAsync(url).Result)
using (var sr = new StreamReader(s))
using (JsonReader reader = new JsonTextReader(sr))
{
var serializer = new JsonSerializer();
result = serializer.Deserialize<BillsList>(reader);
}
return result;
}, cancellationToken);
Итак, мой вопрос. Я хочу продолжить с 3-го пути. Но есть ли способ установить какой-либо обработчик как MyDateTimeConverter для JsonSerializer, чтобы преобразовать его автоматически?