Skip to content

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);

Fork

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)
    );
Clone this wiki locally