Исключение при десериализации даты ISO в JSON

Я пытаюсь десериализовать ответ API на объект класса. Но я получаю сообщение об ошибке:

Содержимое DateTime 2017-11-15T10:00:00 не начинается с \/Дата (и не заканчивается)\/, что требуется для JSON.

Мой код:

client.BaseAddress = new Uri(APP_URL);

client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(APPLICATIONJSON));

DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(List<HttpConference>));

HttpResponseMessage response = client.GetAsync(GET_ALL_CONFERNECES).Result;

response.EnsureSuccessStatusCode();

System.IO.Stream svar = response.Content.ReadAsStreamAsync().Result;

List<HttpConference> model = (List<HttpConference>)serializer.ReadObject(svar);

В базе данных я использую datetime.

Ответ Json:

[
{
    "ID": 1,
    "Namn": "Conference Microsoft",
    "StartDatum": "2017-11-15T10:00:00",
    "SlutDatum": "2017-11-15T12:00:00",
    "KonferensID": null
},
{
    "ID": 2,
    "Namn": "föreläsning",
    "StartDatum": null,
    "SlutDatum": null,
    "KonferensID": null
}
]

это сообщение об ошибке, выдаваемое кодом:

«svar.WriteTimeout» вызвал исключение типа «System.InvalidOperationException».

Я получаю сообщение об ошибке в ReadAsStreamAsync:

EDIT

ReadTimeout = 'reply.ReadTimeout' вызвал исключение типа 'System.InvalidOperationException'

найдено эта статья, в которой говорится об этой проблеме. Но я не знал, как реализовать это в своем коде. Любые идеи?


person AllramEst    schedule 16.11.2017    source источник
comment
Было бы очень полезно, если бы мы могли видеть этот ответ JSON   -  person Sir Rufo    schedule 16.11.2017
comment
Вы также должны подумать об использовании Json.Net для обработки JSON, даже MS использует его, угадайте, почему   -  person Sir Rufo    schedule 16.11.2017
comment
обновить мой вопрос   -  person AllramEst    schedule 16.11.2017
comment
Как мне использовать Json.Net for JSON handling с моим кодом   -  person AllramEst    schedule 16.11.2017
comment
Ну, вы можете перейти к документы и прочтите абзац "Начало работы".   -  person Sir Rufo    schedule 16.11.2017


Ответы (1)


Поскольку вы согласны использовать JSON.NET, вот решение с ним:

Попробуйте онлайн

public static void Main()
{
    // I use the json direclty instead of the httpClient for the example
    var json = @"[
    {
    ""ID"": 1,
    ""Namn"": ""Conference Microsoft"",
    ""StartDatum"": ""2017-11-15T10:00:00"",
    ""SlutDatum"": ""2017-11-15T12:00:00"",
    ""KonferensID"": null
    },
    {
    ""ID"": 2,
    ""Namn"": ""föreläsning"",
    ""StartDatum"": null,
    ""SlutDatum"": null,
    ""KonferensID"": null
    }
    ]";

    // See the official doc there: https://www.newtonsoft.com/json
    var conferences = JsonConvert.DeserializeObject<List<Conference>>(json);
    Console.WriteLine(conferences[0].StartDatum);
}

// this class was generated with http://json2csharp.com/
public class Conference
{
    public int ID { get; set; }
    public string Namn { get; set; }
    public DateTime? StartDatum { get; set; }
    public DateTime? SlutDatum { get; set; }
    public object KonferensID { get; set; } // we cant know the type here. An int maybe?
}

Выход

 11/15/2017 10:00:00 AM

Вне проблемы десериализации вы должны использовать async/await вместо Result.

person aloisdg    schedule 16.11.2017
comment
Не могу заставить это работать, потому что я все еще получаю сообщение об ошибке ReadAsStreamAsync, обновил вопрос. - person AllramEst; 16.11.2017
comment
@AllramEst Итак, у вас проблема с асинхронностью httpclient, а не с json. - person aloisdg; 16.11.2017