牛顿json默认字符串值不起作用?

时间:2019-06-27 08:31:53

标签: c# json.net

当我对对象进行序列化时,对于某些字符串属性,我想输出除忽略以外的空字符串或输出null。

根据牛顿的文档,我可以这样做:

public class Data
{
    public int ProductId { get; set; }

    [DefaultValue("")]
    [JsonProperty(DefaultValueHandling = DefaultValueHandling.Include)]

    public string LargeData { get; set; }
}

但是,在我的测试案例中,它仍然输出null

Data D1 = new Data()
{
     ProductId = 1
};

var b = JsonConvert.SerializeObject(D1);

输出为{"ProductId":1,"LargeData":null}。我在做错什么吗?

1 个答案:

答案 0 :(得分:5)

看着DefaultValueHandling似乎没有任何方法可以做您想要的事情。

默认值属性仅在反序列化时使用,如果该属性未在JSON中指定。忽略/包含选择是与序列化相关的选择,而这些选择不影响序列化的值-只是是否应该进行序列化。

除非您有将值实际设置为null的代码,否则最简单的选择是从.NET角度将属性默认设置为“”:

public class Data
{
    public int ProductId { get; set; }
    public string LargeData { get; set; } = "";
}