如何在布尔属性为空时为其提供默认值
Posted
技术标签:
【中文标题】如何在布尔属性为空时为其提供默认值【英文标题】:How to provide the Default value to a boolean property when it was null 【发布时间】:2021-09-30 03:51:23 【问题描述】:在下面的代码中,我遇到了一个异常,因为 "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>();
【问题讨论】:
这不会编译) 我现在已经更正了 inputMessage @GuruStron 【参考方案1】:这对我有用
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;
【讨论】:
【参考方案2】:假设您正在使用 Newtonsoft.Json,请使用 JsonSerializer
类的 NullValueHandling
属性 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;
【讨论】:
感谢您的回答。在上述解决方案中,您忽略了 Null Value 字段,但在我的情况下,当 isValid 为 Null 时,我想将默认值分配为“False”。bool
的默认值已经是false
,因此从技术上讲,您无需执行任何其他操作。但是,如果您想明确设置默认值,请调查答案中的DefaultValueAttribute
链接。以上是关于如何在布尔属性为空时为其提供默认值的主要内容,如果未能解决你的问题,请参考以下文章