从api响应中动态删除属性

时间:2016-06-18 06:29:28

标签: c# api asp.net-web-api azure-api-apps

我有一个api,其响应如下
“prop1”:“SomeValu1”,
“prop2”:“SomeValue2”,
“prop3”:null,
“prop4”:“SomeValue4”

问题是,基于输入,一些属性将为null(预期行为),我不想这样做   在回复中返回。像这样的东西(prop3不在那里)

“prop1”:“SomeValu1”,
“prop2”:“SomeValue2”,
“prop4”:“SomeValue4”

哪个属性为null基于运行时逻辑。任何想法我怎么能这样做?

2 个答案:

答案 0 :(得分:6)

如果您正在使用JSON,那么您可以试试这个:

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

答案 1 :(得分: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来更改它的名称。