title: Dynamically ignore properties with JacksonJson
body: <p>I'm aware that there are multiple way to tell JacksonJson to ignore
  properties during rendering but all of them are static. (JasonIgnore, MixIn classes, ..).</p>
  
  <p>This is my scenario. A domain object can implement a interface called FilteredDomain to
  allow it to be dynamically filtered. The interface is simple and only exposes one method
  "getIgnoreProperties". (A list of properties to ignore).</p>
  
  <p>I then register a Custom Serializer that binds to the FilteredDomain object. The
  code looks something like:</p>
  
  <pre><code>private class FilteredDomainSerializer extends JsonSerializer&lt;FilteredDomain&gt; {
  
      public void serialize(FilteredDomain arg, JsonGenerator jgen,
              SerializerProvider provder) throws IOException,
              JsonProcessingException {
  
          final BeanWrapper wrapper = PropertyAccessorFactory.forBeanPropertyAccess(arg);
  
          for (PropertyDescriptor pd : wrapper.getPropertyDescriptors()) {
              final String name = pd.getName();
  
              if (arg.getIgnoreProperties().containsKey(name))
                  continue;
  
              final Object value = wrapper.getPropertyValue(name);
  
              jgen.writeObjectField(name, value);
          }
      }
  }
  </code></pre>
  
  <p>First, I really dislike that I need to use the Spring Bean wrapper to get a list of all properties and iterate through them (There must be a way to do this is jackson json).</p>
  
  <p>Second, The code still dosen't work. I get the error:</p>
  
  <p>org.codehaus.jackson.JsonGenerationException: Can not write a field name, expecting a value
      at org.codehaus.jackson.impl.JsonGeneratorBase._reportError(JsonGeneratorBase.java:480)
      at org.codehaus.jackson.impl.Utf8Generator.writeFieldName(Utf8Generator.java:270)
      at org.codehaus.jackson.JsonGenerator.writeObjectField(JsonGenerator.java:1088)
      at com.rootmusic.util.SystemJsonObjectMapper$ValueObjectSerializer.serialize(SystemJsonObjectMapper.java:65)
      at com.rootmusic.util.SystemJsonObjectMapper$ValueObjectSerializer.serialize(SystemJsonObjectMapper.java:1)
      at org.codehaus.jackson.map.ser.ContainerSerializers$IndexedListSerializer.serializeContents(ContainerSerializers.java:304)
      at org.codehaus.jackson.map.ser.ContainerSerializers$IndexedListSerializer.serializeContents(ContainerSerializers.java:254)
      at org.codehaus.jackson.map.ser.ContainerSerializers$AsArraySerializer.serialize(ContainerSerializers.java:142)
      at org.codehaus.jackson.map.ser.MapSerializer.serializeFields(MapSerializer.java:287)
      at org.codehaus.jackson.map.ser.MapSerializer.serialize(MapSerializer.java:212)
      at org.codehaus.jackson.map.ser.MapSerializer.serialize(MapSerializer.java:23)
      at org.codehaus.jackson.map.ser.StdSerializerProvider._serializeValue(StdSerializerProvider.java:606)
      at org.codehaus.jackson.map.ser.StdSerializerProvider.serializeValue(StdSerializerProvider.java:280)</p>