#### [Abblix\.Oidc\.Server](https://www.abblix.com/en/docs/api/abblix-oidc-server 'index')
### [Abblix\.Oidc\.Server\.Common\.Implementation](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.Implementation 'Abblix\.Oidc\.Server\.Common\.Implementation')

## JsonSerializationBinder Class

Implements the [IJsonObjectBinder](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.Interfaces.IJsonObjectBinder 'Abblix\.Oidc\.Server\.Common\.Interfaces\.IJsonObjectBinder') interface to bind JSON data from a [System\.Text\.Json\.Nodes\.JsonObject](https://learn.microsoft.com/en-us/dotnet/api/system.text.json.nodes.jsonobject 'System\.Text\.Json\.Nodes\.JsonObject')
to a specified model type\. This binder utilizes System\.Text\.Json for serialization to dynamically bind
the JSON data to the model's properties, allowing for both creation of new model instances or updating
existing ones based on the provided JSON data\.

```csharp
public class JsonSerializationBinder : Abblix.Oidc.Server.Common.Interfaces.IJsonObjectBinder
```

Inheritance [System\.Object](https://learn.microsoft.com/en-us/dotnet/api/system.object 'System\.Object') → JsonSerializationBinder

Implements [IJsonObjectBinder](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.Interfaces.IJsonObjectBinder 'Abblix\.Oidc\.Server\.Common\.Interfaces\.IJsonObjectBinder')
### Methods

## JsonSerializationBinder\.BindModelAsync\<TModel\>\(JsonObject, TModel\) Method {#Abblix.Oidc.Server.Common.Implementation.JsonSerializationBinder.BindModelAsync_TModel_(System.Text.Json.Nodes.JsonObject,TModel)}

Asynchronously binds JSON data from a [System\.Text\.Json\.Nodes\.JsonObject](https://learn.microsoft.com/en-us/dotnet/api/system.text.json.nodes.jsonobject 'System\.Text\.Json\.Nodes\.JsonObject') to a specified model of type
[TModel](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.Implementation.JsonSerializationBinder#Abblix.Oidc.Server.Common.Implementation.JsonSerializationBinder.BindModelAsync_TModel_(System.Text.Json.Nodes.JsonObject,TModel).TModel 'Abblix\.Oidc\.Server\.Common\.Implementation\.JsonSerializationBinder\.BindModelAsync\<TModel\>\(System\.Text\.Json\.Nodes\.JsonObject, TModel\)\.TModel')\.
The method can update an existing model instance with the data or create and populate a new instance
if none is provided\.

```csharp
public System.Threading.Tasks.Task<TModel?> BindModelAsync<TModel>(System.Text.Json.Nodes.JsonObject properties, TModel? model=null)
    where TModel : class;
```
#### Type parameters

###### `TModel` {#Abblix.Oidc.Server.Common.Implementation.JsonSerializationBinder.BindModelAsync_TModel_(System.Text.Json.Nodes.JsonObject,TModel).TModel}

The type of the model to which the data is to be bound\.
#### Parameters

###### `properties` [System\.Text\.Json\.Nodes\.JsonObject](https://learn.microsoft.com/en-us/dotnet/api/system.text.json.nodes.jsonobject 'System\.Text\.Json\.Nodes\.JsonObject') {#Abblix.Oidc.Server.Common.Implementation.JsonSerializationBinder.BindModelAsync_TModel_(System.Text.Json.Nodes.JsonObject,TModel).properties}

The JSON data as a [System\.Text\.Json\.Nodes\.JsonObject](https://learn.microsoft.com/en-us/dotnet/api/system.text.json.nodes.jsonobject 'System\.Text\.Json\.Nodes\.JsonObject') containing the properties
            to bind to the model\.

###### `model` [TModel](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.Implementation.JsonSerializationBinder#Abblix.Oidc.Server.Common.Implementation.JsonSerializationBinder.BindModelAsync_TModel_(System.Text.Json.Nodes.JsonObject,TModel).TModel 'Abblix\.Oidc\.Server\.Common\.Implementation\.JsonSerializationBinder\.BindModelAsync\<TModel\>\(System\.Text\.Json\.Nodes\.JsonObject, TModel\)\.TModel') {#Abblix.Oidc.Server.Common.Implementation.JsonSerializationBinder.BindModelAsync_TModel_(System.Text.Json.Nodes.JsonObject,TModel).model}

An optional instance of the model to be updated\. If null, a new instance
            of [TModel](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.Implementation.JsonSerializationBinder#Abblix.Oidc.Server.Common.Implementation.JsonSerializationBinder.BindModelAsync_TModel_(System.Text.Json.Nodes.JsonObject,TModel).TModel 'Abblix\.Oidc\.Server\.Common\.Implementation\.JsonSerializationBinder\.BindModelAsync\<TModel\>\(System\.Text\.Json\.Nodes\.JsonObject, TModel\)\.TModel')
            is created\.

Implements [BindModelAsync&lt;TModel&gt;\(JsonObject, TModel\)](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.Interfaces.IJsonObjectBinder#Abblix.Oidc.Server.Common.Interfaces.IJsonObjectBinder.BindModelAsync_TModel_(System.Text.Json.Nodes.JsonObject,TModel) 'Abblix\.Oidc\.Server\.Common\.Interfaces\.IJsonObjectBinder\.BindModelAsync\<TModel\>\(System\.Text\.Json\.Nodes\.JsonObject, TModel\)')

#### Returns
[System\.Threading\.Tasks\.Task&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.task-1 'System\.Threading\.Tasks\.Task\`1')[TModel](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.Implementation.JsonSerializationBinder#Abblix.Oidc.Server.Common.Implementation.JsonSerializationBinder.BindModelAsync_TModel_(System.Text.Json.Nodes.JsonObject,TModel).TModel 'Abblix\.Oidc\.Server\.Common\.Implementation\.JsonSerializationBinder\.BindModelAsync\<TModel\>\(System\.Text\.Json\.Nodes\.JsonObject, TModel\)\.TModel')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.task-1 'System\.Threading\.Tasks\.Task\`1')  
A [System\.Threading\.Tasks\.Task](https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.task 'System\.Threading\.Tasks\.Task') that, when completed, results in the bound model instance
            of [TModel](https://www.abblix.com/en/docs/api/abblix-oidc-server/Abblix.Oidc.Server.Common.Implementation.JsonSerializationBinder#Abblix.Oidc.Server.Common.Implementation.JsonSerializationBinder.BindModelAsync_TModel_(System.Text.Json.Nodes.JsonObject,TModel).TModel 'Abblix\.Oidc\.Server\.Common\.Implementation\.JsonSerializationBinder\.BindModelAsync\<TModel\>\(System\.Text\.Json\.Nodes\.JsonObject, TModel\)\.TModel'), or null if the binding fails\.

### Remarks
This method leverages the JSON serialization capabilities of System\.Text\.Json to map
the JSON properties to the corresponding properties of the model\.
It's designed to handle complex object graphs and can be used to easily populate models
from JSON data or update existing models with new data\.
