gpt4 book ai didi

c# - JsonConvert.SerializeObject 中的默认双值处理

转载 作者:太空宇宙 更新时间:2023-11-03 23:25:58 27 4
gpt4 key购买 nike

我正在使用 Newtonsoft.Json 来序列化自定义类,但我对库如何处理 double 值的默认值有疑问。

类可以是这样的:

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; }
}

关于c# - JsonConvert.SerializeObject 中的默认双值处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33799017/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com