Частичный ответ от одного класса

Я создаю 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 мой базовый класс, который называется premiumpackage, Теперь для Goldpackage Я хочу немного собственности от 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, Так есть ли способ динамически игнорировать свойство класса на основе условия?

Четный Ignoremember а также JSONIgnore будет решена моя проблема. Но для этого мне нужно создать разные классы для разных packageс, что я не хочу этого делать.

Null значение приемлемо.

1 ответ

Там нет настоящего динамического способа справиться с этим, хотя у вас есть несколько вариантов.

  1. Вы можете положиться на JSON.NET NullValueHandling а также DefaultValueHandling, Вы можете добавить что-то вроде следующего атрибута в свойства вашего класса:

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

    Затем вы можете только установить те свойства, которые хотите установить. Все, что имеет нулевое значение или значение по умолчанию, будет удалено из ответа JSON.

  2. Вы можете использовать анонимные объекты. Анонимные объекты могут быть составлены по прихоти, и сериализатор JSON может по-прежнему создавать из них правильный ответ JSON. Таким образом, вы можете условно сделать что-то вроде:

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

    Это эффективно позволяет вам создать любой ответ, который вам нравится.

Другие вопросы по тегам