json.net中是否有任何内置设置可以禁止将数字转换为布尔值。我希望它返回一个错误,而不是:(不为每个具有bool属性的类编写自定义转换器)
public class MyClass
{
public bool flag { get; set; }
}
var str = @"{"flag":123}";
MyClass result = JsonConvert.DeserializeObject<MyClass>(str) ; // flag is true !
答案 0 :(得分:1)
您不应在一个属性中使用不同的类型来获得一个bool
结果。
但是,如果您不想为该类中的每个属性声明一个自定义JsonConvert,则始终可以在代码中创建DefaultSettings。
void Initialize()
{
JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
Converters = new List<JsonConverter>
{
new BoolJsonConverter()
}
};
}
// Create JsonConvert you want to add to DefaultSettings
public class BoolJsonConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(bool);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
}
}
var json = @"{""flag"":123}"
var myClass = JsonConvert.DeserializeObject<MyClass>(json);
答案 1 :(得分:0)
我假设这是仅反序列化的情况。在这种情况下,您可以将int
的值放入int
并使用另一个变量来保存bool
。像-
public class MyClass
{
public int flagInt { get; set; }
[JsonIgnore]
public bool flag
{
get
{
switch (flagInt)
{
case 0: return false;
case 1: return true;
default: throw new Exception("Cannot convert flag to bool");
}
}
}
}
请注意,我在flag
上没有设置器,因此执行类似flag = false
的操作将不会得到预期的结果,也不会正确地序列化。