В Postman я отправляю следующий JSON через POST в API.
{
"id": "21",
"crgName": "Walgreens - 11/07/2018 - Standard ",
"crgStarteddatetime": "2018-11-07T10:11:10",
}
... но я получаю следующую ошибку: FormatException: String не был распознан как допустимый DateTime.
Внутри моего контроллера я использую DateTimeFormat для форматирования даты и времени:
public static RemoteContextType DeserializeJsonString<RemoteContextType>(string jsonString)
{
//create an instance of generic type object
RemoteContextType obj = Activator.CreateInstance<RemoteContextType>();
MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(jsonString));
var serializer = new DataContractJsonSerializer(obj.GetType(),
new DataContractJsonSerializerSettings
{
DateTimeFormat = new
DateTimeFormat("yyyy-MM-dd'T'HH:mm:ss.fff'Z'")
});
obj = (RemoteContextType)serializer.ReadObject(ms);
ms.Close();
return obj;
}
... есть ли проблема в моем синтаксисе относительно того, как я отформатировал дату? Я намерен сформировать дату так, как она отражена в JSON. Могу я получить помощь относительно того, что я делаю не так?





Проблема заключается в этой строке:
DateTimeFormat = new DateTimeFormat("yyyy-MM-dd'T'HH:mm:ss.fff'Z'")
Вы указываете формат точно как UTC / Zulu datetime с описателем формата 'Z' и трехзначной долей секунд (Спецификатор формата fff), но значение, используемое в crgStarteddatetime, не имеет их обоих (т.е. yyyy-MM-dd'T'HH:mm:ss).
Основываясь на примере JSON, вы должны изменить формат, чтобы он точно соответствовал предоставленному в crgStarteddatetime:
var serializer = new DataContractJsonSerializer(obj.GetType(), new DataContractJsonSerializerSettings
{
DateTimeFormat = new DateTimeFormat("yyyy-MM-dd'T'HH:mm:ss")
});
Если фактические данные JSON crgStarteddatetime имеют смешанные форматы даты (некоторые даты имеют yyyy-MM-dd'T'HH:mm:ss, а другие могут иметь yyyy-MM-dd'T'HH:mm:ss'Z'), используйте Спецификатор формата K, который более гибок для обработки формата часового пояса:
var serializer = new DataContractJsonSerializer(obj.GetType(), new DataContractJsonSerializerSettings
{
DateTimeFormat = new DateTimeFormat("yyyy-MM-dd'T'HH:mm:ssK")
});
Спасибо, я очень ценю вашу помощь