The .NET API uses JSON.NET to serialize objects that are to be indexed. When using the Client class some customizations are automatically made to the serialization but further customization is possible. By customizing how objects are serialized it is possible to include additional fields, exclude fields, handle how fields are serialized and so on.
Customization can be done in two ways, using attributes and by customizing the conventions used by the Client. Attributes enable us to quickly apply common customizations to classes that we can modify. The conventions on the other hand enable us to do very powerfull customizations (such as customizing multiple classes at the same time and including return values from extension methods) without having to modify the the classes of the objects being serialized.