Частичный ответ от одного класса
Я создаю 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
, Так есть ли способ динамически игнорировать свойство класса на основе условия?
Четный Ignoremember
а также JSONIgnore
будет решена моя проблема. Но для этого мне нужно создать разные классы для разных package
с, что я не хочу этого делать.
Null
значение приемлемо.
1 ответ
Там нет настоящего динамического способа справиться с этим, хотя у вас есть несколько вариантов.
Вы можете положиться на JSON.NET
NullValueHandling
а такжеDefaultValueHandling
, Вы можете добавить что-то вроде следующего атрибута в свойства вашего класса:[JsonProperty(NullValueHandling = NullValueHandling.Ignore, DefaultValueHandling = DefaultValueHandling.Ignore)]
Затем вы можете только установить те свойства, которые хотите установить. Все, что имеет нулевое значение или значение по умолчанию, будет удалено из ответа JSON.
Вы можете использовать анонимные объекты. Анонимные объекты могут быть составлены по прихоти, и сериализатор JSON может по-прежнему создавать из них правильный ответ JSON. Таким образом, вы можете условно сделать что-то вроде:
return Ok(new { Prop1 = something.SomeValue, Prop2 = something.SomeOtherValue, // etc. });
Это эффективно позволяет вам создать любой ответ, который вам нравится.