2016-06-18 33 views
0

我有一個API,其響應是如下
「PROP1」: 「SomeValu1」,
「PROP2」: 「SomeValue2」,
「prop3」:空,
「prop4 「:」SomeValue4「動態地從API響應刪除屬性

問題是,基於輸入的一些屬性將爲空(預期行爲),我不希望 返回響應。像這樣的東西(prop3是不存在的)

「PROP1」: 「SomeValu1」,
「PROP2」: 「SomeValue2」,
「prop4」: 「SomeValue4」

哪個屬性將是無效的基礎運行時邏輯。任何想法我怎麼能做到這一點?

回答

6

如果在JSON的工作,然後你可以試試這個:

JsonConvert.SerializeObject(yourObject, 
         Newtonsoft.Json.Formatting.None, 
         new JsonSerializerSettings { 
          NullValueHandling = NullValueHandling.Ignore 
         }); 
0

DataContract屬性有屬性稱爲EmitDefaultValue如果將它設置爲false,它不會被序列化。

如果您在Dto類中添加這些屬性,您將獲得您所要求的功能。 https://msdn.microsoft.com/en-us/library/system.runtime.serialization.datamemberattribute.emitdefaultvalue(v=vs.110).aspx

例子:

[DataContract] 
public class ExampleDto 
{ 
    [DataMember(Name="prop1", EmitDefaultValue=false)] 
    public string Prop1 {get;set;} 
    [DataMember(Name="prop2", EmitDefaultValue=false)] 
    public string Prop2 {get;set;} 
    [DataMember(Name="prop3", EmitDefaultValue=false)] 
    public string Prop3 {get;set;} 
    [DataMember(Name="prop4", EmitDefaultValue=false)] 
    public string Prop4 {get;set;} 
} 

你甚至可以使用屬性Name改變序列化時,它的名字。