如何在Web服务发送bool但收到int时序列化/反序列化

时间:2016-11-21 16:10:32

标签: c# json

目前正在使用最烦人的网络服务!我正在使用Newtonsoft Json.Net。

当我请求数据时,bool属性EndOfDay将作为truefalse发送 - 反序列化工作正常但令人烦恼的是,当我向Web服务发送数据时,对于同一字段我必须发送0或1 - 不要问为什么我不能给你一个好的答案 - 我所知道的是我无法改变它。

有没有办法将bool序列化为0或1,即使我反序列化字符串将是真/假或我应该承认失败并且具有几乎相同的单独对象,除了这一个属性 - 一个对象有一个bool另一个是int?

1 个答案:

答案 0 :(得分:4)

一种方法是使用自定义对流器:

 c = new c(url,port,username:password);

测试

class Test {
    [JsonConverter(typeof(StrangeBoolConverter))]
    public bool EndOfDay { get; set; }

    private class StrangeBoolConverter : JsonConverter {
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) {
            // write it as 1 or 0
            writer.WriteValue((bool) value ? 1 : 0);
        }

        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) {
            // but when reading - expect "true" or "false"
            return Convert.ToBoolean(reader.Value);
        }

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