我正在使用Newtonsoft.Json
来序列化自定义类,并且我有一个问题,即库如何处理双精度的默认值。
课程可以是:
class Person
{
public string FullName { get; set; }
public double Score {get; set; }
public bool IsStudent {get; set; }
public double Weight {get;set; }
}
其中FullName
和Score
是必填字段,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
}
所以我没有设置的所有属性(在此演示IsStudent
和Weight
中)。在我的原始代码中,该类包含其他double
和boolean
字段,而且我不需要包含它们(如果我将Weight
等于0传递给不正确的值)
有一种方法可以将序列化的行为更改为仅包含特定字段(在我的情况下只包括Score
但不包括IsStudent
和Weight
)或至少只包含特定类型(double
但不是bool
)?
答案 0 :(得分:3)
您可以使用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; }
}
答案 1 :(得分:0)
这是你想要的吗?
class Person
{
public string FullName { get; set; }
public double Score {get; set; }
public bool IsStudent {get; set; }
public double? Weight {get;set; }
}
在这种情况下,如果你没有设置Weight,它将为NULL。