我们有一些 JSON 正在反序列化为 C# 中的强类型对象图。但是,我们遇到了一个问题:有时 JSON 中的一个“空”值(例如,空字符串)在映射到我们模型中的布尔值的属性中。
在我们的例子中,我们知道 100% 的时间,我们可以将这些“空白”值转换为 Boolean false
。
但是,我尝试过的 JSON 反序列化器并不知道这一点(可以理解)。
我一直在尝试找到一种方法来拦截每个属性的反序列化,并可选择覆盖输出。即,如果有一个我可以注册的“拦截器”方法,它看起来像这样:
public Boolean JsonDeserializationInterceptor(String rawJson, System.Type targetType, out object result)
{
Boolean overrodeValue = false;
result = null;
if(targetType == typeof(System.Boolean))
{
overrodeValue = true;
// We'll pretend that we're interpreting the string "Yes" as
// true, and all other values are false.
if (rawJson != null && rawJson.ToLower() == "\"yes\"")
result = true;
else
result = false;
}
return overrodeValue;
}
当然,这只是假设,但希望它能让您了解我想要完成的工作。
在我的研究中,我无法找到一种方法来做到这一点。我看过Json.NET、System.Runtime.Serialization.Json.DataContractJsonSerializer和System.Web.Script.Serialization.JavaScriptSerializer。我敢打赌有一种方法可以做到这一点,而我只是无法弄清楚。
编辑:我认为您可能可以使用JsonConverterAttribute,但到目前为止我还无法使其正常工作。