来自一个类的部分响应



我正在创建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中的那些类属性。那么有没有办法根据条件动态忽略类属性呢?

即使是IgnorememberJSONIgnore也会解决我的问题。但是为此,我需要为不同的package创建不同的类,我不想这样做。

Null值是可以接受的。

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

  1. 您可以依赖 JSON。NET的NullValueHandlingDefaultValueHandling .您可以向类属性添加类似于以下属性的内容:

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

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

  2. 您可以使用匿名对象。匿名对象可以随心所欲地组合,JSON 序列化程序仍然可以从中创建适当的 JSON 响应。因此,您可以有条件地执行以下操作:

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

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

相关内容

  • 没有找到相关文章

最新更新