# Custom parameter types

To demonstrate how a custom type can be supported, we are going to create a converter for an arbitrary class.

```csharp
public class Person
{
    public readonly string name;
    public readonly int age;

    public Person(string name, int age)
    {
        this.name = name;
        this.age = age;
    }
}
```

## Converter methods

The way converters work, is by creating a method that takes in a `string` and return an actual value. Converter methods must return a non-primitive type, and they must only take **1** parameter of type `ArgumentReader`.

To mark a method as a converter method, simply place a `[Converter]` attribute on it.

```cs
[Converter]
public static Person PersonTypeConverter(ArgumentReader reader)
{
    
}
```

{% hint style="info" %}
**Note**

The method doesn't have to be located within the type we're attempting to convert. These methods can be stored anywhere you prefer
{% endhint %}
