繁体   English   中英

JsonConvert.SerializeObject中的默认双值处理

[英]default double value handling in JsonConvert.SerializeObject

我正在使用Newtonsoft.Json来序列化一个自定义类,我有一个问题,即库如何处理双精度的默认值。

这个班可以像:

class Person
{
    public string FullName { get; set; }
    public double Score {get; set; }
    public bool IsStudent {get; set; }
    public double Weight {get;set; }
}

其中FullNameScore是必填字段, IsStudent是可选字段。

如果我序列化对象:

Person mark = new Person();
mark.FullName = "Mark Twain";
mark.Score = 0.0;
var jsonMark = JsonConvert.SerializeObject(mark);

我得到的是

{
  "FullName": "Mark Twain";
}

因为0.0是double的默认值。

我需要始终传递该值,如果它是0.0 如果我使用JsonSerializerSettings序列化

var settings = new JsonSerializerSettings();
settings.DefaultValueHandling = DefaultValueHandling.Include;
var jsonMark = JsonConvert.SerializeObject(mark);

我明白了

{
  "FullName": "Mark Twain",
  "Score": 0.0,
  "IsStudent": false,
  "Weight": 0.0
}

所以我没有设置的所有属性(在此演示中IsStudentWeight )。 在我的原始代码中,该类包含其他doubleboolean字段,并且对于API我不需要包含它们(如果我将Weight等于0传递给不正确的值)。

有一种方法可以改变序列化的行为,只包括特定字段(在我的情况下只是Score而不是IsStudentWeight )或者至少只包含特定类型( double但不是bool )?

您可以使用JsonProperty属性修饰这些特定属性,并为每个属性专门设置DefaultValueHandling

class Person
{
    public string FullName { get; set; }
    [JsonProperty(DefaultValueHandling = DefaultValueHandling.Include)]
    public double Score { get; set; }
    public bool IsStudent { get; set; }
    public double Weight { get; set; }
}

这是你想要的吗?

class Person
{
    public string FullName { get; set; }
    public double Score {get; set; }
    public bool IsStudent {get; set; }
    public double? Weight {get;set; }
}

在这种情况下,如果你没有设置Weight,它将为NULL。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM