-
Notifications
You must be signed in to change notification settings - Fork 380
Naming convention
By default, Mapster will map property with case sensitive name. You can adjust to flexible name mapping by setting NameMatchingStrategy.Flexible to NameMatchingStrategy method. This setting will allow matching between PascalCase, camelCase, lower_case, and UPPER_CASE.
This setting will apply flexible naming globally.
TypeAdapterConfig.GlobalSettings.Default.NameMatchingStrategy(NameMatchingStrategy.Flexible);
or by specific type mapping.
TypeAdapterConfig<Foo, Bar>.NewConfig().NameMatchingStrategy(NameMatchingStrategy.Flexible);
Flexible name could not map between MiXcAsE and MixCase, because flexible name will break MiXcAsE into Mi-Xc-As-E rather than just Mix-Case. In this case, we need to use IgnoreCase to perform case insensitive matching.
TypeAdapterConfig.GlobalSettings.Default.NameMatchingStrategy(NameMatchingStrategy.IgnoreCase);
For custom rules, you can use either ConvertSourceMemberName or ConvertDestinationMemberName up to which side you would like to convert. For example, you might would like to add m_ to all properties.
TypeAdapterConfig<Poco, Dto>.NewConfig()
.NameMatchingStrategy(NameMatchingStrategy.ConvertSourceMemberName(name => "m_" + name));
This example is to replace foreign letter from name.
TypeAdapterConfig<Poco, Dto>.NewConfig()
.NameMatchingStrategy(NameMatchingStrategy.ConvertSourceMemberName(name => name.Replace("Ä", "A"));
If you would like to change case from POCO to IDictionary<string, T> to camelCase, you can use ToCamelCase. Another way around, if you would like to map IDictionary<string, T> back to POCO, you can use FromCamelCase.
TypeAdapterConfig<Poco, Dictionary<string, object>>.NewConfig()
.NameMatchingStrategy(NameMatchingStrategy.ToCamelCase);
TypeAdapterConfig<Dictionary<string, object>, Poco>.NewConfig()
.NameMatchingStrategy(NameMatchingStrategy.FromCamelCase);
NOTE: mapping from IDictionary<string, T> to POCO, you can also use Flexible or IgnoreCase, but both will be slower since it will scan through dictionary entries rather than lookup.
- Configuration
- Config inheritance
- Config instance
- Config location
- Config validation & compilation
- Config for nested mapping
- Custom member matching logic
- Constructor mapping
- Before & after mapping
- Setting values
- Shallow & merge mapping
- Recursive & object references
- Custom conversion logic
- Inheritance