从 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
更改它的名称。
我有一个 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
更改它的名称。