2017-03-03 76 views
1

我不禁要看看我空着的口袋,想知道是否有任何一分钱可以在我的网络应用程序捏。
望着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的属性,所以,我可以对“默认”值也做同样的事情吗?

+4

JSON.Net有'DefaultValueHandling.Ignore' http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_DefaultValueHandling.htm – phuzi

+1

我同意@phuzi,但要补充一点,它不会为布尔工作,如果你不在bool属性上添加[DefaultValue(false)] – Dominik

+0

如何使用类似GZIP压缩来压缩响应? –

回答

1

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

var serialiserSettings = 
    new JsonSerializerSettings { DefaultValueHandling = DefaultValueHandling.Ignore }); 

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

0

是的。

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

如果输出值为false,则不会在输出中包含SomeProperty。当反序列化时,如果它从输入中丢失,它会将值设置为false。

+0

这个问题很有效,但是在每个班级的每个属性上做这件事都会是一大笔工作 – Leonardo