JsonConvert在序列化中不包括未设置的数字成员

时间:2019-12-08 23:02:04

标签: c# json.net

我上课

public class Container
{
    public long Id { get; set; }
    public string Name { get; set; }
    public List<string> Aliases { get; set; }
    public double Height { get; set; }
    public double Weight { get; set; }
}

如果我创建

var container = new Container
{
    Weight = 127.3
}

我希望它序列化为JSON:

{
  "Weight": 127.3
}

但实际上它被序列化为:

{
  "Id": 0,
  "Height": 0.0,
  "Weight": 127.3
}

我试图用它来序列化它:

var settings = new JsonSerializerSettings
{
    NullValueHandling = NullValueHandling.Ignore,
    MissingMemberHandling = MissingMemberHandling.Ignore
};
var json = JsonConvert.SerializeObject(container, Formatting.Indented, settings);

据我所知,原始类型(例如intlong不能为null。我认为这就是导致这种意外行为的原因。

当我未明确设置值时,如何解决此问题以获得所需的输出?我认为例如将所有long变成Nullable<long>可能并不理想。

1 个答案:

答案 0 :(得分:2)

这些值不可为空,因此它们永远不会为空。之所以看不到字符串属性,是因为字符串可为空,因此其默认值为null。 诸如int,long等数字类型的默认值分别为0、0.0等。如果您确实想忽略默认值,则需要改用DefaultValueHandling。我通常只是将那些属性设置为可为空(例如int? MyNullableInt),因为我真的不关心null,但是有些项目可能确实需要值为0。

https://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_DefaultValueHandling.htm