Как сбросить свойство на объекте Delta - PullRequest
0 голосов
/ 15 мая 2018

Я использую службы мобильных приложений 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 ]

0 голосов
/ 22 октября 2018

Не думаю, что вам следует пытаться удалить 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);
    }
   }
}
0 голосов
/ 20 октября 2018

Если вы используете 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 
    }
}
...