# Object source

**Location**: [main sources module](https://vostok.gitbook.io/configuration/modules/sources).

[**ObjectSource**](https://github.com/vostok/configuration.sources/blob/master/Vostok.Configuration.Sources/Object/ObjectSource.cs) converts an arbitrary object (including anonymous types) to a [settings node](https://vostok.gitbook.io/configuration/concepts-and-basics/settings-nodes):

```
var source = new ObjectSource(new {A = 1, B = 2, C = new[] {1, 2, 3});
```

Conversion process obeys the following priority list:

* Objects with overridden `ToString` are converted to [value nodes](https://vostok.gitbook.io/configuration/concepts-and-basics/settings-nodes/value-nodes);
* Dictionaries with primitive key types are converted to [object nodes](https://vostok.gitbook.io/configuration/concepts-and-basics/settings-nodes/object-nodes);
  * Conversion is performed recursively for keys and values;
* Objects that implement `IEnumerable` are converted to [array nodes](https://vostok.gitbook.io/configuration/concepts-and-basics/settings-nodes/array-nodes);
  * Conversion is performed recursively for sequence elements;
* Everything else is converted to [object nodes](https://vostok.gitbook.io/configuration/concepts-and-basics/settings-nodes/object-nodes);
  * Conversion is performed recursively for public instance fields and properties;

Like [constant sources](https://vostok.gitbook.io/configuration/sources/constant-source), object source does not produce any updates by itself; conversion exceptions are exposed via `(null, error)` notifications.

### Related pages

{% content-ref url="../concepts-and-basics/configuration-sources" %}
[configuration-sources](https://vostok.gitbook.io/configuration/concepts-and-basics/configuration-sources)
{% endcontent-ref %}
