Refactor of ShouldSerialize () в классе ... я могу использовать IContractResolver?

У меня есть API, который возвращает большой список функций автомобиля .... все они либо bool или ints ... и в основном я хочу отображать только те, которые возвращают истинные значения или>0 для целых

Я использую JSON.net, чтобы я мог использовать свойство ShouldSerialize (), чтобы определить, следует ли мне сериализовать свойство на основе его значения, и мой код выглядит следующим образом:

public class Features
{
    public bool ABS { get; set; }

    public bool ShouldSerializeABS()
    {
        // don't serialize the ABS property if ABS is false
        return (ABS != false);
    }


    public bool Immobiliser { get; set; }

    public bool ShouldSerializeImmobiliser ()
    {
        // don't serialize the Immobiliser property if Immobiliser is false
        return (Immobiliser != false);
    }

    public int BHP { get; set; }

    public bool ShouldSerializeBHP  ()
    {
        // don't serialize the BHP property if BHP is false
        return (BHP != 0);
    }
    //..... etc
}

Это прекрасно работает и дает мне результаты, которых я добиваюсь, однако мне было просто интересно, есть ли способ переформулировать это так, чтобы мой класс не загромождался всеми свойствами ShouldSerialize ()?

Я смотрел вCopyConditional свойства сIContractResolver наhttp://james.newtonking.com/projects/json/help/index.html?topic=html/ConditionalProperties.htm и похоже, что можно было бы использоватьIContractResolver для этой цели, но я все еще, кажется, в конечном итоге с большим количеством кода, который, кажется, не рефакторинг

public class ShouldSerializeContractResolver : DefaultContractResolver
{
   public new static readonly ShouldSerializeContractResolver Instance = new ShouldSerializeContractResolver();

   protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
   {
     JsonProperty property = base.CreateProperty(member, memberSerialization);

     if (property.DeclaringType == typeof(Features) && property.PropertyName == "ABS")
     {
         property.ShouldSerialize =
           instance =>
           {
               Features e = (Features)instance;
               return e.ABS != false;
           };
     }
     if (property.DeclaringType == typeof(Features) && property.PropertyName == "Immobiliser")
     {
         property.ShouldSerialize =
           instance =>
           {
               Features e = (Features)instance;
               return e.Immobiliser != false;
           };
     }

    return property;
  }
}

и этот метод с использованием ShouldSerializeContractResolver, по-видимому, не удаляет свойство из класса, если оно ложно ... любая помощь очень ценится

Ответы на вопрос(1)

Ваш ответ на вопрос