Как обрабатывать значения null/empty в JsonConvert.DeserializeObject
У меня есть следующий код:
return (DataTable)JsonConvert.DeserializeObject(_data, (typeof(DataTable)));
Затем я попытался:
var jsonSettings = new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore
};
return (DataTable)JsonConvert.DeserializeObject<DataTable>(_data, jsonSettings);
Линия возврата бросает ошибку:
{ "Ошибка преобразования значения \" \ "для ввода 'System.Double'." }
Много решений в Интернете, предлагающих создание пользовательских Class
с типами NULL, но это не сработает для меня. Я не могу ожидать, что json будет в определенном формате. Я не могу контролировать количество столбцов, тип столбца или имена столбцов.
Ответы
Ответ 1
Вы можете указать настройки JsonConvert.DeserializeObject
, чтобы сообщить, как обрабатывать нулевые значения в этом случае и многое другое:
var settings = new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore,
MissingMemberHandling = MissingMemberHandling.Ignore
};
var jsonModel = JsonConvert.DeserializeObject<Customer>(jsonString, settings);
Ответ 2
Вы можете подписаться на событие "Ошибка" и проигнорировать ошибки (-ы) сериализации по мере необходимости.
static void Main(string[] args)
{
var a = JsonConvert.DeserializeObject<DataTable>("-- JSON STRING --", new JsonSerializerSettings
{
Error = HandleDeserializationError
});
}
public static void HandleDeserializationError(object sender, ErrorEventArgs errorArgs)
{
var currentError = errorArgs.ErrorContext.Error.Message;
errorArgs.ErrorContext.Handled = true;
}