Подтвердить что ты не робот

Как обрабатывать значения 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 будет в определенном формате. Я не могу контролировать количество столбцов, тип столбца или имена столбцов.

4b9b3361

Ответ 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;
    }