如何不序列化默认值

时间:2017-03-03 16:41:20

标签: c# json azure

我忍不住看着我空洞的口袋,想知道我的网络应用程序中是否有任何便士。 看着我一直在吐痰的JSON,我不禁想知道是否有办法不序列化默认值,例如:

{
"gservs": {
  "EmpresaId": 1044,
  "GservsId": 7,
  "Descricao": "Cabelos"
},
"EmpresaId": 1044,
"ServicosId": 97,
"GServsId": 7,
"Descricao": "auxiliar geral",
"Informativo": "",
"simNao": false,
"PermiteEncaixe": false,
"UsaQuimica": false,
"CustosGerais": 0.0000,
"Preco": 0.0000,
"Comissao": 0.0000,
"ValPercComissao": "P",
"TipoComissao": false,
"ValPercCustos": "P",
"TipoCusto": false,
"ServicoAux": true,
"ValPercComisAux": "P",
"TipoComissaoAux": false,
"IncidComisAux": "A",
"DiasRetorno": 0,
"TempoExecucao": "00:00:00",
"TempoHora": 0,
"TempoMinMarcacao": 0,
"TempoHoraMarcacao": 0,
"TempoMin": 0,
"Ativo": false,
"Mobilidade": false,
"PermiteSimultaneidade": false,
"ParticipaMilhagem": true
}

如果你检查出来,你可以计算406个字节被浪费了默认值。我的估计是,在常规日结束时,我将浪费大约1美元(我在Azure Zone 3 - Brazil South)浪费带宽......

我学到了一段时间,我可以告诉JsonSerializer忽略null的属性,那么,我也可以对“默认”值做同样的事情吗?

2 个答案:

答案 0 :(得分:1)

JSON.net有一个DefaultValueHandling枚举来处理不同的场景。尝试像

这样的东西
var serialiserSettings = 
    new JsonSerializerSettings { DefaultValueHandling = DefaultValueHandling.Ignore });

然后在将对象序列化为JSON时使用此选项。这将删除任何具有默认值的内容。

答案 1 :(得分:0)

是。

public class ThingToSerialize {
   [DefaultValue(false)]
   [JsonProperty(DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate)]
   public bool SomeProperty { get; set; }
}

如果其值为false,则输出中不包含SomeProperty。反序列化时,如果输入中缺少该值,则会将该值设置为false。