C# JSONVERT don';在序列化中不包括未设置的数字成员
我有一节课C# JSONVERT don';在序列化中不包括未设置的数字成员,c#,json.net,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; } } 我希望将其序列化为JSON: {
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; }
}
我希望将其序列化为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);
据我所知,基本类型(如int
和long
我猜)不能为null。我认为这就是导致这种意外行为的原因
当我没有显式设置值时,如何解决这个问题以获得我想要的输出?例如,我认为将所有
long
转换为null
可能并不理想。这些值不可为null,因此它们永远不会为null。您看不到字符串属性打印的原因是字符串可为null,因此其默认值为null。
int、long等数字类型的默认值为0、0.0等。如果确实要忽略默认值,则需要使用DefaultValueHandling
。我通常只会将那些属性设置为null(例如,int?MyNullableInt
),因为我确实不关心null,但是有些项可能确实有一个我需要知道的值0
这些值不可为空,因此它们永远不会为空。您看不到字符串属性打印的原因是字符串可为null,因此其默认值为null。 int、long等数字类型的默认值为0、0.0等。如果确实要忽略默认值,则需要使用
DefaultValueHandling
。我通常只会将那些属性设置为null(例如,int?MyNullableInt
),因为我确实不关心null,但是有些项可能确实有一个我需要知道的值0
是
“重量127.3
是一个打字错误吗?@SamuelG是的,我会编辑以更正它,谢谢你可能重复的是“重量127.3
一个打字错误吗?@SamuelG是的,我会编辑以更正它,谢谢你可能重复的int?
是完美的。实际上我并不知道这个方便的语言功能的存在。int?
非常完美。我并不知道这种方便的语言功能的存在。
var settings = new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore,
MissingMemberHandling = MissingMemberHandling.Ignore
};
var json = JsonConvert.SerializeObject(container, Formatting.Indented, settings);