如何在布尔值 属性 为 null 时为其提供默认值
How to provide the Default value to a boolean property when it was null
在下面的代码中我得到一个异常,因为 "isValid"
来自输入请求 null
。
我想在输入请求 null
时将 "isValid"
设置为 "False"
。
任何人都可以建议我如何做到这一点吗?
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>();
假设您使用的是 Newtonsoft.Json,请使用 NullValueHandling
property of the JsonSerializer
class, setting it to ignore。然后将 JsonSerializer
的实例传递给 ToObject<T>
函数的重载。
这告诉序列化忽略任何为空的属性,使 属性 初始化为其默认值。 (如果需要,您可以通过 System.ComponentModel.DefaultValueAttribute
单独控制该默认值。)
完整编译示例如下。 (删除了对 'Body' 的引用,以便更容易关注主要问题。)
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; }
}
}
这对我有用
void Main()
{
var inputMessage = "{ \"Body\":{\"status\":\"success\", \"MessageInfo\":{\"isValid\":null} }}";
var inputMessageObj= JsonConvert.DeserializeObject<Root>(inputMessage);
}
类
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; }
}
在下面的代码中我得到一个异常,因为 "isValid"
来自输入请求 null
。
我想在输入请求 null
时将 "isValid"
设置为 "False"
。
任何人都可以建议我如何做到这一点吗?
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>();
假设您使用的是 Newtonsoft.Json,请使用 NullValueHandling
property of the JsonSerializer
class, setting it to ignore。然后将 JsonSerializer
的实例传递给 ToObject<T>
函数的重载。
这告诉序列化忽略任何为空的属性,使 属性 初始化为其默认值。 (如果需要,您可以通过 System.ComponentModel.DefaultValueAttribute
单独控制该默认值。)
完整编译示例如下。 (删除了对 'Body' 的引用,以便更容易关注主要问题。)
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; }
}
}
这对我有用
void Main()
{
var inputMessage = "{ \"Body\":{\"status\":\"success\", \"MessageInfo\":{\"isValid\":null} }}";
var inputMessageObj= JsonConvert.DeserializeObject<Root>(inputMessage);
}
类
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; }
}