C# 当web服务发送bool但接收int时,如何序列化/反序列化

C# 当web服务发送bool但接收int时,如何序列化/反序列化,c#,json,C#,Json,目前正在使用最烦人的web服务!我正在使用Newtonsoft Json.Net 当我请求数据时,bool属性EndOfDay作为true或false发送-反序列化工作正常,但令人烦恼的是,当我向web服务发送数据时,对于同一字段,我必须发送0或1-不要问为什么,因为我不能给你一个好的答案-我所知道的是我无法更改它 是否有一种方法可以将布尔值序列化为0或1,即使当我反序列化字符串时,字符串将为真/假,或者我是否应该承认失败,并且具有几乎相同的单独对象,除了这一个属性-一个对象具有布尔值,另一个对

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

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


是否有一种方法可以将布尔值序列化为0或1,即使当我反序列化字符串时,字符串将为真/假,或者我是否应该承认失败,并且具有几乎相同的单独对象,除了这一个属性-一个对象具有布尔值,另一个对象具有int值?

一种方法是使用自定义Converter:

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);
        }
    }
}
试验

var test=JsonConvert.DeserializeObject(“{\”EndOfDay\”:\“true\”);
var back=JsonConvert.SerializeObject(测试);//{“EndOfDay”:“1”}

你不能在该字段中使用
int
进行序列化/反序列化吗?据我所知,Json.Net不会将bool反序列化为int-它来自web服务作为bool。然后我不明白你为什么要序列化为int。无论如何,看一看当我从web服务得到一个bool时,我收到了一个bool,但是当我推到web服务时,我必须为链接提供0或1个hanks,我看过类似的问题,但它们并没有完全满足我的需要。嗯……这不是我在评论中链接的问题的答案吗?:)@Pikoh的确是这样,但在你告诉我之前,我没有看到你的评论和答案:)没关系,我认为这可能是最好的答案啊-这个例子实际上比评论中的链接例子更容易理解。让我试一试。@Rick嗯,他确实根据您的应用程序量身定制了它,所以这很有帮助。回答得好
var test = JsonConvert.DeserializeObject<Test>("{\"EndOfDay\":\"true\"}");
var back = JsonConvert.SerializeObject(test); // {"EndOfDay": "1"}