我有一个api,其响应如下
“prop1”:“SomeValu1”,
“prop2”:“SomeValue2”,
“prop3”:null,
“prop4”:“SomeValue4”
问题是,基于输入,一些属性将为null(预期行为),我不想这样做
在回复中返回。像这样的东西(prop3不在那里)
“prop1”:“SomeValu1”,
“prop2”:“SomeValue2”,
“prop4”:“SomeValue4”
哪个属性为null基于运行时逻辑。任何想法我怎么能这样做?
答案 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
来更改它的名称。