从 api 响应中动态删除属性

Dynamically remove properties from api response

我有一个 api 的回复如下
"prop1": "SomeValu1",
"prop2": "SomeValue2",
"prop3": 空,
"prop4": "SomeValue4"

问题是,根据输入,某些属性将为空(预期行为),我不想这样做 return 在响应中。类似这样的东西(prop3 不存在)

"prop1": "SomeValu1",
"prop2": "SomeValue2",
"prop4": "SomeValue4"

哪个 属性 将为 null 基于运行时逻辑。我该怎么做?

如果您正在研究 JSON 那么您可以试试这个:

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

DataContract 属性有 属性 调用 EmitDefaultValue 如果您将它设置为 false,它将不会被序列化。

如果您在 Dto class 中添加这些属性,您将获得所需的功能。 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 更改它的名称。