JsonConvert:如何忽略值是特定数字的整数类型 [英] JsonConvert: How to ignore Integer types where the value is a specific number

查看:143
本文介绍了JsonConvert:如何忽略值是特定数字的整数类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有没有一种方法告诉JsonConvert当它们具有特定值时忽略整数类型值?我想使用整数类型的minValue而不是0作为默认类型,因为0是有效值.

Is there a way to tell JsonConvert to ignore integer type values when they have a specific value? I want to use the minValue of an Integer Type instead of 0 as the default type because 0 is a valid value.

推荐答案

Json.NET将尊重System.ComponentModel.DefaultValue属性,因此您可以执行以下操作:

Json.NET will respect System.ComponentModel.DefaultValue attribute, so you can do what you want like this:

class TestClass {
    [DefaultValue(int.MinValue)]
    public int Value { get; set; }
}

var ser = JsonConvert.SerializeObject(new TestClass() { Value = int.MinValue}, new JsonSerializerSettings
{
    DefaultValueHandling = DefaultValueHandling.Ignore
});
// serializes to empty object {}
Console.WriteLine(ser);

var ser = JsonConvert.SerializeObject(new TestClass() { Value = 0}, new JsonSerializerSettings
{
    DefaultValueHandling = DefaultValueHandling.Ignore
});
// serializes to {"Value" : 0}
Console.WriteLine(ser);

如果您不想装饰任何东西,可以使用自定义合同解析器:

If you don't want to decorate anything, you can use custom contract resolver:

class IntMinValueContractResolver : DefaultContractResolver {
    protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) {
        var prop = base.CreateProperty(member, memberSerialization);
        if (prop.PropertyType == typeof(int)) {
            // for int properties, set default value and ignore it when serializing
            // while populating while deserializing
            prop.DefaultValue = int.MinValue;
            prop.DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate;
        }
        return prop;
    }
}

JsonConvert.DefaultSettings = () => new JsonSerializerSettings()
{
    ContractResolver = new IntMinValueContractResolver()
};
// serializes to empty object {}
var ser = JsonConvert.SerializeObject(new TestClass() { Value = int.MinValue});

这篇关于JsonConvert:如何忽略值是特定数字的整数类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆