Как сбросить свойство на объекте Delta
Я использую службы мобильных приложений Azure и в методе PATCH получаю в качестве тела объект типа Delta (см. MSDN).
Я получаю некоторые поля с нулевыми значениями, которые я хотел бы удалить из входного объекта Delta: как я могу сделать это действие?
например, у меня есть вход JSON, как
{
"Content":"test",
"CreatedAt":null
...
}
это сопоставляет сущность, которая наследуется от Microsoft.Azure.Mobile.Server.EntityData, например
public class MyBean : EntityData
{
public MyBean() { }
public string Content { get; set; }
}
Я хотел бы удалить поле "CreatedAt", которое, кстати, объявлено в родительском объекте EntityData, являющемся частью библиотеки Microsoft (поэтому у меня нет прямого доступа к нему).
2 ответа
Я не думаю, что вам следует пытаться удалить CreatedAt, но вместо этого возьмите входящую Дельту и создайте новую. Вы можете включить нужные поля или исключить те, которые вам не нужны.
var newDelta = new Delta<MyBean>();
foreach(var fieldName in patchDelta.GetChangedPropertyNames()){
if(fieldName != "CreatedAt"){
if(patchDelta.TryGetPropertyValue(fieldName, out object fieldValue)){
newDelta.TrySetPropertyValue(fieldNAme,fieldValue);
}
}
}
Если вы используете Newtonsoft.Json для сериализации сущности, вы можете использовать условную сериализацию свойства.
Чтобы условно сериализовать свойство, добавьте метод, который возвращает логическое значение с тем же именем, что и у свойства, а затем добавьте префикс метода к методу ShouldSerialize. Результат метода определяет, будет ли свойство сериализовано. Если метод возвращает значение true, свойство будет сериализовано, если оно возвращает значение false, свойство будет пропущено.
public class MyBean : EntityData
{
public MyBean() { }
public string Content { get; set; }
public bool ShouldSerializeCreatedAt()
{
return false;
// Or you can add some condition to whether serialize the property or not on runtime
}
}