我上课
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; }
}
如果我创建
var container = new Container
{
Weight = 127.3
}
我希望它序列化为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
变成Nullable<long>
可能并不理想。
答案 0 :(得分:2)
这些值不可为空,因此它们永远不会为空。之所以看不到字符串属性,是因为字符串可为空,因此其默认值为null。
诸如int,long等数字类型的默认值分别为0、0.0等。如果您确实想忽略默认值,则需要改用DefaultValueHandling
。我通常只是将那些属性设置为可为空(例如int? MyNullableInt
),因为我真的不关心null,但是有些项目可能确实需要值为0。
https://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_DefaultValueHandling.htm