Uploaded image for project: 'C# Driver'
  1. C# Driver
  2. CSHARP-4374

Add SetPropertyGetter and SetPropertySetter methods to BsonMemberMap

    • Type: Icon: New Feature New Feature
    • Resolution: Unresolved
    • Priority: Icon: Unknown Unknown
    • None
    • Affects Version/s: 2.18.0
    • Component/s: Serialization
    • Labels:
      None

      A common paradigm is to create a private backing field for a public property on a C# class (POCO).  Often times there is logic in the property setter to validate input, modify a related field or record an event log/history of the change.  This logic should not be performed when deserializing the object from the database.  Currently, the only alternative is to provide a creator/constructor method.  This can be painful for classes with many properties, especially if only one ( or a few) property(ies) have backing fields and setter logic that should be skipped on re-hydration.  It can also lead to bugs when new properties are added but developers forget to add them to the constructor.

      By allowing callers to set a custom setter(and getter) actions, developers can still AutoMap the class, but customize individual properties that require special handling.  Something like:

      public BsonMemberMap SetPropertySetter(Action<object, object> setter) 

      Ideally, there would also be a overload like this:

      public BsonMemberMap SetPropertySetter(string memberName)

      This overload will allow developers to simply specify an alternate member, like a private backing field,  to use when setting the value during deserialization.
       

      There are probably fewer use cases for customizing the Getter, but it could still be valuable and would maintain symmetry:

      public BsonMemberMap SetPropertyGetter(Func<object, object> getter) 

      public BsonMemberMap SetPropertyGetter(string memberName)

            Assignee:
            Unassigned Unassigned
            Reporter:
            dmannion@propractice.com David Mannion
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated: