Объект API равен нулю, когда дата и время передаются через json - PullRequest
2 голосов
/ 08 мая 2019

В настоящее время я пытаюсь создать запрос POST для создания заказа. Это отлично работает, если я поставлю свой JSON, как это:

  "Id": "A2EC1753-88DC-45E1-AD26-F887E0013323",
  "OrderType": "10",
  "Customer": "8111345C-95E3-460F-90FB-26E62E4265C4",
  "CustomerCode": "155542",
  "SubTotal": 417,
  "VatTotal": 0,
  "Total": 417,
 "Created": "2015-03-03T14:01:19.773+01:00",
  "Date": "2015-03-03T14:01:19.773+01:00",
.....

Но когда я даю дату, которую отправляет мой клиент (гггг-мм-дд чч: мм: сс) i.e.:

"Id": "A2EC1753-88DC-45E1-AD26-F887E0013323",
  "OrderType": "10",
  "Customer": "8111345C-95E3-460F-90FB-26E62E4265C4",
  "CustomerCode": "155542",
  "SubTotal": 417,
  "VatTotal": 0,
  "Total": 417,
 "Created": "2019-04-26 16:53:39",
  "Date": "2019-04-26 16:53:39",
.....

Объект в моем контроллере возвращает ноль.

Дата создания и дата имеют тип DateTime.

Что мне здесь не хватает?

Изменить:

Итак, клиент отправляет DateTime как гггг-ММ-дд ЧЧ: мм: сс. По-видимому, это не стандартная структура json для .Net.

Спецификация имеет объекты, массивы, строки, целые числа и числа с плавающей точкой, но она не определяет стандарт для того, как выглядит дата. Формат по умолчанию, используемый Json.NET, - это стандарт ISO 8601: «2012-03-19T07: 22Z». До выпуска Json.NET 4.5 даты записывались в формате Microsoft: "/Date(1198908717056)/".15 фев. 2009

Я пытался изменить его соответственно https://stackoverflow.com/a/49978720/7639883 и ответ ниже.

public void ConfigureServices(IServiceCollection services)
        {
            services.AddOData();
            services.AddMvc()
            .AddJsonOptions(options =>
            {
                options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; // month must be capital. otherwise it gives minutes.
            }); 

            Setting.ConnectionString = Configuration.GetConnectionString("DefaultConnection");
            services.AddDbContext<IsahContext>(
                options => options.UseSqlServer(Setting.ConnectionString)
            );
        }

Но по какой-то причине он все еще не работает.

1 Ответ

1 голос
/ 08 мая 2019

Для версий Core, использующих NewtonSoft.Json (т. Е. До версии 3.0), эта статья может быть полезной: https://vikutech.blogspot.com/2017/01/handling-json-datetime-format-on-asp.net-core.html

Как описано в статье, чтобы преобразование Json, обрабатываемое классом Newtonsoft.Json.Converters.IsoDateTimeConverter, использовало пользовательское форматирование даты, в метод Configure необходимо добавить приведенный ниже код:

   services.AddMvc()  
   .AddJsonOptions(options =>  
   {  
     options.SerializerSettings.DateTimeZoneHandling = "MM/dd/yyyy HH:mm:ss";  
   });  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...