使json.net序列化布尔人作为字符串



我想强迫newtonsoft.json的 JsonConvert.SerializeObject始终威胁bool值作为字符串: "true" and "false"

我知道 JsonConvert是静态类,我可能应该写一个类似这样的扩展方法:

JsonConvert.DefaultSettings = () => new JsonSerializerSettings {}

但是说实话,我不知道该怎么做,也不知道如何将其实施到我的方法中:

public static string Serialize(Foo fooData)
{
    return JsonConvert.SerializeObject(fooData);
}

我会感谢任何建议。

您可以做一个简单的JsonConverter来做到这一点:

public class BoolToStringConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(bool);
    }
    public override bool CanRead
    {
        get { return false; }
    }
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        writer.WriteValue((bool)value ? "true" : "false");
    }
}

然后这样使用:

JsonSerializerSettings settings = new JsonSerializerSettings
{
    Converters = new List<JsonConverter> { new BoolToStringConverter() },
    Formatting = Formatting.Indented
};
var json = JsonConvert.SerializeObject(obj, settings);

演示:https://dotnetfiddle.net/aeo1hg

最新更新