1

我正在创建 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我想要一些来自Class1喜欢prop1的财产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. 那么有没有办法根据条件动态忽略类属性?

甚至IgnorememberJSONIgnore解决我的问题。但为此我需要为不同package的 s 创建不同的类,我不想这样做。

Null值是可以接受的。

4

1 回答 1

0

尽管您有几个选择,但没有真正的动态方法来处理这个问题。

  1. 您可以依赖 JSON.NETNullValueHandlingDefaultValueHandling. 您可以将以下属性添加到您的类属性中:

    [JsonProperty(NullValueHandling = NullValueHandling.Ignore, DefaultValueHandling = DefaultValueHandling.Ignore)]
    

    然后,您可以有条件地只设置您想要设置的属性。任何具有 null 或默认值的内容都将从 JSON 响应中删除。

  2. 您可以使用匿名对象。匿名对象可以随意组合,JSON 序列化程序仍然可以从它们创建正确的 JSON 响应。因此,您可以有条件地执行以下操作:

    return Ok(new
    {
        Prop1 = something.SomeValue,
        Prop2 = something.SomeOtherValue,
        // etc.
    });
    

    这有效地允许您创建您喜欢的任何响应。

于 2019-07-23T12:56:39.567 回答