En el siguiente código, obtengo una excepción porque "isValid" viene como null en la solicitud de entrada.
Quiero establecer "isValid" en "False" cuando era null desde la solicitud de entrada.
¿Puede alguien por favor sugerirme cómo puedo hacer esto?
public class Details { public string status { get; set; } public MessageInfo messageInfo { get; set; } } public class MessageInfo { public bool isValid { get; set; } } var inputMessage = { "Body": { "status":"success", "MessageInfo": { "isValid":null } } } var messagebody = inputMessage.Body.ToObject<Details>();Suponiendo que está usando Newtonsoft.Json, use la propiedad NullValueHandling de la clase JsonSerializer , configurándola para ignorar . Luego pase esta instancia de JsonSerializer a una sobrecarga de la ToObject<T> .
Esto le dice a la serialización que ignore cualquier propiedad que fuera nula, dejando la propiedad inicializada en su valor predeterminado. (Puede controlar ese valor predeterminado por separado a través System.ComponentModel.DefaultValueAttribute si lo desea).
Ejemplo de compilación completa a continuación. (Se eliminaron las referencias a 'Cuerpo' para que sea más fácil concentrarse en el problema principal).
using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace SomeNamespace { public class Program { private static void Main() { var inputMessage = JToken.Parse( @"{ ""status"":""success"", ""MessageInfo"": { ""isValid"":null } }"); // build a custom serializer with a setting to ignore null var jsonSettings = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, }; var serializer = JsonSerializer.Create(jsonSettings); // using the serializer with custom settings avoids the original exception var messagebody = inputMessage.ToObject<Details>(serializer); } } public class Details { public string status { get; set; } public MessageInfo messageInfo { get; set; } } public class MessageInfo { public bool isValid { get; set; } } }esto funciona para mi
void Main() { var inputMessage = "{ \"Body\":{\"status\":\"success\", \"MessageInfo\":{\"isValid\":null} }}"; var inputMessageObj= JsonConvert.DeserializeObject<Root>(inputMessage); }clases
public class Details { public string status { get; set; } public MessageInfo messageInfo { get; set; } } public class MessageInfo { private bool? _isValid = false; public bool? IsValid { get { return _isValid; } set { _isValid = value == null ? false : value; } } } public class Body { public string Status { get; set; } public MessageInfo MessageInfo { get; set; } } public class Root { public Body Body { get; set; } }