2017-03-03 83 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