Сериализация JSON Date и DateTime в C # и newtonsoftC#

Место общения программистов C#
Ответить
Anonymous
 Сериализация JSON Date и DateTime в C # и newtonsoft

Сообщение Anonymous »

Мы отправляем JSON в API, определенный Swagger, где некоторые свойства имеют тип DateTime в формате гггг-ММ-ддТчч:мм:сс.000Z (миллисекунды должны быть 3-значными, иначе проверка не пройдет проверку в конечной точке), а некоторые Свойства даты (без времени).

Я видел много сообщений, в которых говорилось, что используйте форматтеры следующим образом:

var jsonSettings = new JsonSerializerSettings();
jsonSettings.DateFormatString = "yyyy-MM-ddThh:mm:ss.000Z"; //try .fffZ too
var jsonObject= Newtonsoft.Json.JsonConvert.DeserializeObject(json , setting);


но это не преобразует DateTimes в правильный формат, и как C# обрабатывает тип только Date? Кажется, что он всегда сериализуется как DateTime.MinValue()

Вот пример:

Кто-то отправляет мне json как строка, но даты и время в неправильном формате для отправки в конечную точку. Я надеялся, что класс swagger и десериализация json отформатируют их, но это не так.

Это сгенерированный класс swagger

public class OurSwaggerObject
{
[Newtonsoft.Json.JsonProperty("dateTimeField", Required = Newtonsoft.Json.Required.Always)]
[System.ComponentModel.DataAnnotations.Required]
[System.ComponentModel.DataAnnotations.RegularExpression(@"^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d\.\d{3}Z$")]
public DateTime dateTimeField { get; set; }

[Newtonsoft.Json.JsonProperty("dateField", Required = Newtonsoft.Json.Required.Always)]
[System.ComponentModel.DataAnnotations.Required]
[System.ComponentModel.DataAnnotations.RegularExpression(@"^\d{4}-\d\d-\d\d$")]
public DateTime dateField { get; set; }
}


Поэтому я пытаюсь заставить json быть правильным, но я делаю это неправильно или чего-то не хватает

string json = @"{ 'dateTimeField': '1995-04-07T00:00:00',
'dateField': '1995-04-07T00:00:00'
}";

/* The json we need to satisfy the swagger endpoint is:

{ 'dateTimeField': '1995-04-07T00:00:00.000Z',
'dateField': '1995-04-07'
}
*/

OurSwaggerObject deserialisedIntoObject = Newtonsoft.Json.JsonConvert.DeserializeObject(json);

string serialisedToString = Newtonsoft.Json.JsonConvert.SerializeObject(deserialisedIntoObject);
//serialisedToString= "{\"dateTimeField\":\"1995-04-07T00:00:00\",\"dateField\":\"1995-04-07T00:00:00\"}"

var jsonSettings = new JsonSerializerSettings();
jsonSettings.DateFormatString = "yyyy-MM-ddThh:mm:ss.fffZ"; //this won't help much for the 'date' only field!
deserialisedIntoObject = Newtonsoft.Json.JsonConvert.DeserializeObject(json,jsonSettings);
serialisedToString = Newtonsoft.Json.JsonConvert.SerializeObject(deserialisedIntoObject, jsonSettings);
//serialisedToString="{\"dateTimeField\":\"1995-04-07T00:00:00\",\"dateField\":\"1995-04-07T00:00:00\"}"


Подробнее здесь: https://stackoverflow.com/questions/461 ... newtonsoft
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»