[英]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,請使用JsonSerializer
類的NullValueHandling
屬性, 將其設置為 ignore 。 然后將此JsonSerializer
實例JsonSerializer
給ToObject<T>
函數的重載。
這告訴序列化忽略任何為 null 的屬性,將屬性初始化為其默認值。 (如果需要,您可以通過System.ComponentModel.DefaultValueAttribute
單獨控制該默認值。)
下面的完整編譯示例。 (刪除了對“身體”的引用,以便更容易地關注主要問題。)
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; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.