我正在创建API,需要提供部分响应等功能。我知道在部分响应中,客户端/用户需要在控制器方法中传递 require 参数。但我的情况有点不同。我需要根据名为 package
的参数名称创建部分响应。
例如
[Serializable]
[DataContract]
public class Class1
{
[DataMember]
public double? prop1 { get; set; }
[DataMember]
public string prop2 { get; set; }
[DataMember]
public DateTime? prop3 { get; set; }
[DataMember]
public double? prop4 { get; set; }
[DataMember]
public double? prop5 { get; set; }
[DataMember]
public double? prop6 { get; set; }
[DataMember]
public double? prop7 { get; set; }
[DataMember]
public double? prop8 { get; set; }
[DataMember]
public double? prop9 { get; set; }
[DataMember]
public double? prop10 { get; set; }
}
所以,上面Class1
是我的基类,称为premium
package
。现在Gold
package
我想要像prop1
这样的Class1
的财产很少prop4
。所以我的代码是这样的。
switch (`package`)
{
case "Premium":
Fill the all properties of class1
break;
case "Gold":
Fill the few properties of class1
break;
case "Silver":
Fill the few properties of class2
break;
default:
//TODO
break;
}
所以基于packages
,我想返回我的回应。但是作为回应,我只想添加包含在package
中的那些类属性。那么有没有办法根据条件动态忽略类属性呢?
即使是Ignoremember
和JSONIgnore
也会解决我的问题。但是为此,我需要为不同的package
创建不同的类,我不想这样做。
Null
值是可以接受的。
没有真正的动态方法来处理这个问题,尽管你有几个选择。
-
您可以依赖 JSON。NET的
NullValueHandling
和DefaultValueHandling
.您可以向类属性添加类似于以下属性的内容:[JsonProperty(NullValueHandling = NullValueHandling.Ignore, DefaultValueHandling = DefaultValueHandling.Ignore)]
然后,您可以有条件地仅设置要设置的属性。任何具有 null 或默认值的内容都将从 JSON 响应中删除。
-
您可以使用匿名对象。匿名对象可以随心所欲地组合,JSON 序列化程序仍然可以从中创建适当的 JSON 响应。因此,您可以有条件地执行以下操作:
return Ok(new { Prop1 = something.SomeValue, Prop2 = something.SomeOtherValue, // etc. });
这有效地允许您创建您喜欢的任何响应。