#### [Abblix\.SecurityEvents](https://www.abblix.com/en/docs/api/abblix-securityevents 'index')
### [Abblix\.SecurityEvents\.Validation\.Steps](https://www.abblix.com/en/docs/api/abblix-securityevents/Abblix.SecurityEvents.Validation.Steps 'Abblix\.SecurityEvents\.Validation\.Steps')

## PayloadDeserializationStep Class

Deserializes every event payload through the registry \- into its registered model, or the raw
passthrough for a type the registry does not know \- so the consumer receives typed events
instead of repeating this work per statement\.

```csharp
public sealed class PayloadDeserializationStep : Abblix.SecurityEvents.Validation.ISecurityEventTokenValidator
```

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

Implements [ISecurityEventTokenValidator](https://www.abblix.com/en/docs/api/abblix-securityevents/Abblix.SecurityEvents.Validation.ISecurityEventTokenValidator 'Abblix\.SecurityEvents\.Validation\.ISecurityEventTokenValidator')

### Remarks
The step requires a verified signature: deserialization into registered models is the
pipeline's most elaborate parsing, and running it on unverified input would hand an attacker
the largest possible parser surface before any authenticity check\. The ordering contract makes
a pipeline composed that way fail its first run\.
### Constructors

## PayloadDeserializationStep\(EventTypeRegistry\) Constructor {#Abblix.SecurityEvents.Validation.Steps.PayloadDeserializationStep.PayloadDeserializationStep(Abblix.SecurityEvents.Events.EventTypeRegistry)}

Deserializes every event payload through the registry \- into its registered model, or the raw
passthrough for a type the registry does not know \- so the consumer receives typed events
instead of repeating this work per statement\.

```csharp
public PayloadDeserializationStep(Abblix.SecurityEvents.Events.EventTypeRegistry registry);
```
#### Parameters

###### `registry` [EventTypeRegistry](https://www.abblix.com/en/docs/api/abblix-securityevents/Abblix.SecurityEvents.Events.EventTypeRegistry 'Abblix\.SecurityEvents\.Events\.EventTypeRegistry') {#Abblix.SecurityEvents.Validation.Steps.PayloadDeserializationStep.PayloadDeserializationStep(Abblix.SecurityEvents.Events.EventTypeRegistry).registry}

The event\-type registrations of this receiver\.

### Remarks
The step requires a verified signature: deserialization into registered models is the
pipeline's most elaborate parsing, and running it on unverified input would hand an attacker
the largest possible parser surface before any authenticity check\. The ordering contract makes
a pipeline composed that way fail its first run\.
### Methods

## PayloadDeserializationStep\.ValidateAsync\(SecurityEventTokenValidationContext, CancellationToken\) Method {#Abblix.SecurityEvents.Validation.Steps.PayloadDeserializationStep.ValidateAsync(Abblix.SecurityEvents.Validation.SecurityEventTokenValidationContext,System.Threading.CancellationToken)}

Checks the token in flight\.

```csharp
public System.Threading.Tasks.ValueTask<Abblix.SecurityEvents.Validation.SecurityEventTokenValidationError?> ValidateAsync(Abblix.SecurityEvents.Validation.SecurityEventTokenValidationContext context, System.Threading.CancellationToken cancellationToken);
```
#### Parameters

###### `context` [SecurityEventTokenValidationContext](https://www.abblix.com/en/docs/api/abblix-securityevents/Abblix.SecurityEvents.Validation.SecurityEventTokenValidationContext 'Abblix\.SecurityEvents\.Validation\.SecurityEventTokenValidationContext') {#Abblix.SecurityEvents.Validation.Steps.PayloadDeserializationStep.ValidateAsync(Abblix.SecurityEvents.Validation.SecurityEventTokenValidationContext,System.Threading.CancellationToken).context}

The state accumulated by earlier steps\.

###### `cancellationToken` [System\.Threading\.CancellationToken](https://learn.microsoft.com/en-us/dotnet/api/system.threading.cancellationtoken 'System\.Threading\.CancellationToken') {#Abblix.SecurityEvents.Validation.Steps.PayloadDeserializationStep.ValidateAsync(Abblix.SecurityEvents.Validation.SecurityEventTokenValidationContext,System.Threading.CancellationToken).cancellationToken}

Cancels I/O the step performs, such as key retrieval\.

Implements [ValidateAsync\(SecurityEventTokenValidationContext, CancellationToken\)](https://www.abblix.com/en/docs/api/abblix-securityevents/Abblix.SecurityEvents.Validation.ISecurityEventTokenValidator#Abblix.SecurityEvents.Validation.ISecurityEventTokenValidator.ValidateAsync(Abblix.SecurityEvents.Validation.SecurityEventTokenValidationContext,System.Threading.CancellationToken) 'Abblix\.SecurityEvents\.Validation\.ISecurityEventTokenValidator\.ValidateAsync\(Abblix\.SecurityEvents\.Validation\.SecurityEventTokenValidationContext, System\.Threading\.CancellationToken\)')

#### Returns
[System\.Threading\.Tasks\.ValueTask&lt;](https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.valuetask-1 'System\.Threading\.Tasks\.ValueTask\`1')[SecurityEventTokenValidationError](https://www.abblix.com/en/docs/api/abblix-securityevents/Abblix.SecurityEvents.Validation.SecurityEventTokenValidationError 'Abblix\.SecurityEvents\.Validation\.SecurityEventTokenValidationError')[&gt;](https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.valuetask-1 'System\.Threading\.Tasks\.ValueTask\`1')  
Null to pass the token on; an error to stop the pipeline with that verdict\.
