ConcreteTypeConverter Explained

POCO DataSet uses a custom converter pattern named ConcreteTypeConverter to handle the serialization and deserialization of interfaces such as IDataSet, IDataTable, IDataRow, and IColumnMetadata. JSON serializers cannot directly instantiate interfaces, so the converter bridges the gap by mapping an interface type to a specific concrete implementation.

Purpose of ConcreteTypeConverter

Typical Usage Pattern

The converter is typically registered in JsonSerializerOptions as follows (conceptually):

jsonSerializerOptions.Converters.Add(new ConcreteTypeConverter<IDataSet, DataSet>());
jsonSerializerOptions.Converters.Add(new ConcreteTypeConverter<IDataTable, DataTable>());
jsonSerializerOptions.Converters.Add(new ConcreteTypeConverter<IDataRow, DataRow>());
jsonSerializerOptions.Converters.Add(new ConcreteTypeConverter<IColumnMetadata, ColumnMetadata>());

How It Works Internally (Conceptual)

 

Table of Content POCO DataSet Serialization and Deserialization