-
Notifications
You must be signed in to change notification settings - Fork 332
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