2013-01-20 68 views
34

我打电话了布尔领域的互联网服务和返回的数据为bool是0或1但与我的模型我使用的是System.Bool转换int型Json.Net

随着Json.Net是有可能将0/1转换为我的模型的布尔值?

目前,我得到一个错误

Newtonsoft.Json.JsonSerializationException:错误的转换数值 “0”,键入 'System.Boolean'

任何帮助将是真棒!

回答

84

端了我的模型内创建一个转换器

public class BoolConverter : JsonConverter 
{ 
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) 
    { 
     writer.WriteValue(((bool)value) ? 1 : 0); 
    } 

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) 
    { 
     return reader.Value.ToString() == "1"; 
    } 

    public override bool CanConvert(Type objectType) 
    { 
     return objectType == typeof(bool); 
    } 
} 

然后

[JsonConverter(typeof(BoolConverter))] 
    public bool active { get; set; } 

希望这可以帮助别人

+1

根据不同的情况,你可能还需要'布尔?'的' CanConvert' –

+0

是否有可能将这个自定义转换器应用于所有对象的所有布尔属性,而无需添加JsonConverter属性? – Grengas