JsonSerializationException при синтаксическом анализе JSON в DataTable - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь проанализировать JSON данные до DataTable в C#. Но при разборе я вижу Newtonsoft.Json.JsonSerializationException.

Ошибка преобразования значения "" в тип "System.DateTime". Путь '[1] [' Дата создания ']', строка 8, позиция 20.

Вот код, который я использовал для анализа данных:

DataTable dtData = JArray.Parse(jsonString).ToObject<DataTable>(); 

Пример JSON data:

[
  {
    "rno": 1,
    "Name": "XYZ",
    "Created Date": "2014-04-30T14:39:12.2397769Z"
  },
  {
    "rno": 2,
    "Name": "ABC",
    "Created Date": ""
  }
]

Может кто-нибудь сказать мне, как управлять этим типом сценария. Я просто хочу предотвратить изменение типа данных при добавлении данных в таблицу данных. Вместо DateTime тип данных столбца должен быть задан как строка.

1 Ответ

0 голосов
/ 04 мая 2020

При десериализации JSON в DataTable, Json. Net автоматически пытается определить тип данных каждого столбца на основе значений свойств первого элемента в массиве. В этом случае первый элемент имеет строку даты для свойства Created Date, поэтому тип данных столбца устанавливается на DateTime. Ошибка возникает во втором элементе, когда синтаксический анализатор обнаруживает пустую строку для свойства Created Date. Пустая строка не может быть преобразована в DateTime, так что получается JsonSerializationException.

Если вы хотите, чтобы столбец Created Date всегда анализировался как строка вместо DateTime, вы можно установить DateParseHandling на None. Это предотвратит ошибку, которую вы видите.

Измените этот код:

DataTable dtData = JArray.Parse(jsonString).ToObject<DataTable>();

На это:

var settings = new JsonSerializerSettings { DateParseHandling = DateParseHandling.None };
DataTable dtData = JsonConvert.DeserializeObject<DataTable>(jsonString, settings);

Fiddle: https://dotnetfiddle.net/EWWGT0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...