-
Notifications
You must be signed in to change notification settings - Fork 380
Config for nested mapping
chaowlert edited this page Jul 30, 2020
·
2 revisions
For example if you have parent and child classes.
class ParentPoco
{
public string Id { get; set; }
public List<ChildPoco> Children { get; set; }
public string Name { get; set; }
}
class ChildPoco
{
public string Id { get; set; }
public List<GrandChildPoco> GrandChildren { get; set; }
}
class GrandChildPoco
{
public string Id { get; set; }
}And if you have setting on parent type.
TypeAdapterConfig<ParentPoco, ParentDto>.NewConfig()
.PreserveReference(true);By default, children types will not get effect from PreserveReference.
To do so, you must specify all type pairs inside ParentPoco.
TypeAdapterConfig<ParentPoco, ParentDto>.NewConfig()
.PreserveReference(true);
TypeAdapterConfig<ChildPoco, ChildDto>.NewConfig()
.PreserveReference(true);
TypeAdapterConfig<GrandChildPoco, GrandChildDto>.NewConfig()
.PreserveReference(true);Or you can set PreserveReference in global setting.
TypeAdapterConfig.GlobalSettings.Default.PreserveReference(true);You can use Fork command to define config that applies only specified mapping down to nested mapping without polluting global setting.
TypeAdapterConfig<ParentPoco, ParentDto>.NewConfig()
.Fork(config => config.Default.PreserveReference(true));Ignore if string is null or empty
Another example, Mapster only can ignore null value (IgnoreNullValues), however, you use Fork to ignore null or empty.
TypeAdapterConfig<ParentPoco, ParentDto>.NewConfig()
.Fork(config => config.ForType<string, string>()
.MapToTargetWith((src, dest) => string.IsNullOrEmpty(src) ? dest : src)
);- 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