JsonConvert.SerializeObject 中的默认双值处理
default double value handling in JsonConvert.SerializeObject
我正在使用 Newtonsoft.Json
来序列化自定义 class,但我对库如何处理双精度值的默认值有疑问。
class 可以是这样的:
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
)。在我的原始代码中,class 包含其他 double
和 boolean
字段,对于 API 我不需要包含它们(如果我传递 Weight
等于到 0 不是正确的值)。
有一种方法可以改变序列化的行为,使其只包含特定的字段(在我的例子中只是 Score
而不是 IsStudent
和 Weight
)或者至少只包含一个特定类型(double
但不是 bool
)?
是你想要的吗?
class Person
{
public string FullName { get; set; }
public double Score {get; set; }
public bool IsStudent {get; set; }
public double? Weight {get;set; }
}
在这种情况下,如果您没有设置权重,它将为 NULL。
您可以用 JsonProperty
attribute, and specifically set the 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; }
}
我正在使用 Newtonsoft.Json
来序列化自定义 class,但我对库如何处理双精度值的默认值有疑问。
class 可以是这样的:
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
)。在我的原始代码中,class 包含其他 double
和 boolean
字段,对于 API 我不需要包含它们(如果我传递 Weight
等于到 0 不是正确的值)。
有一种方法可以改变序列化的行为,使其只包含特定的字段(在我的例子中只是 Score
而不是 IsStudent
和 Weight
)或者至少只包含一个特定类型(double
但不是 bool
)?
是你想要的吗?
class Person
{
public string FullName { get; set; }
public double Score {get; set; }
public bool IsStudent {get; set; }
public double? Weight {get;set; }
}
在这种情况下,如果您没有设置权重,它将为 NULL。
您可以用 JsonProperty
attribute, and specifically set the 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; }
}