2016-06-18 28 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改变序列化时,它的名字。