• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

705
Views
Cómo manejar valores nulos/vacíos en JsonConvert.DeserializeObject

Tengo el siguiente código:

 return (DataTable)JsonConvert.DeserializeObject(_data, (typeof(DataTable)));

Entonces, probé:

 var jsonSettings = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; return (DataTable)JsonConvert.DeserializeObject<DataTable>(_data, jsonSettings);

La línea de retorno arroja el error:

{"Error al convertir el valor \"\" para escribir 'System.Double'."}

Muchas soluciones en línea sugieren crear una Class personalizada con tipos anulables, pero esto no funcionará para mí. No puedo esperar que el json esté en un formato determinado. No tengo control sobre el recuento de columnas, el tipo de columna o los nombres de las columnas.

about 3 years ago · Santiago Trujillo
3 answers
Answer question

0

Puede proporcionar configuraciones a JsonConvert.DeserializeObject para indicarle cómo manejar valores nulos, en este caso, y mucho más:

 var settings = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, MissingMemberHandling = MissingMemberHandling.Ignore }; var jsonModel = JsonConvert.DeserializeObject<Customer>(jsonString, settings);
about 3 years ago · Santiago Trujillo Report

0

Una solución alternativa para Thomas Hagström, que es mi preferida, es usar el atributo de propiedad en las variables miembro.

Por ejemplo, cuando invocamos una API, puede o no devolver el mensaje de error, por lo que podemos establecer la propiedad NullValueHandling para ErrorMessage:

 public class Response { public string Status; public string ErrorCode; [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] public string ErrorMessage; } var response = JsonConvert.DeserializeObject<Response>(data);

El beneficio de esto es aislar la definición de datos (qué) y la deserialización (uso), la deserialización no necesita preocuparse por la propiedad de los datos, de modo que dos personas puedan trabajar juntas, y la declaración de deserialización será limpia y simple.

about 3 years ago · Santiago Trujillo Report

0

Puede suscribirse al evento 'Error' e ignorar los errores de serialización según sea necesario.

 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; }
about 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error