Attribute base Code generation (original) (raw)
Generate models
Annotate your class with [AdaptFrom]
, [AdaptTo]
, or [AdaptTwoWays]
.
Example:
[AdaptTo("[name]Dto")] public class Student { ... }
Then Mapster will generate:
public class StudentDto { ... }
Ignore some properties on generation
By default, code generation will ignore properties that annotated [AdaptIgnore]
attribute. But you can add more settings which include IgnoreAttributes
, IgnoreNoAttributes
, IgnoreNamespaces
.
Example:
[AdaptTo("[name]Dto", IgnoreNoAttributes = new[] { typeof(DataMemberAttribute) })] public class Student {
[DataMember]
public string Name { get; set; } //this property will be generated
public string LastName { get; set; } //this will not be generated
}
Change property types
By default, if property type annotated with the same adapt attribute, code generation will forward to that type. (For example, Student
has ICollection<Enrollment>
, after code generation StudentDto
will has ICollection<EnrollmentDto>
).
You can override this by [PropertyType(typeof(Target))]
attribute. This annotation can be annotated to either on property or on class.
For example:
[AdaptTo("[name]Dto")] public class Student { public ICollection Enrollments { get; set; } }
[AdaptTo("[name]Dto"), PropertyType(typeof(DataItem))] public class Enrollment { [PropertyType(typeof(string))] public Grade? Grade { get; set; } }
This will generate:
public class StudentDto { public ICollection Enrollments { get; set; } } public class EnrollmentDto { public string Grade { get; set; } }
Generate readonly properties
For [AdaptTo]
and [AdaptTwoWays]
, you can generate readonly properties with MapToConstructor
setting.
For example:
[AdaptTo("[name]Dto", MapToConstructor = true)] public class Student { public string Name { get; set; } }
This will generate:
public class StudentDto { public string Name { get; }
public StudentDto(string name) {
this.Name = name;
}
}
Generate nullable properties
For [AdaptFrom]
, you can generate nullable properties with IgnoreNullValues
setting.
For example:
[AdaptFrom("[name]Merge", IgnoreNullValues = true)] public class Student { public int Age { get; set; } }
This will generate:
public class StudentMerge { public int? Age { get; set; } }
Generate extension methods
Generate using [GenerateMapper]
attribute
For any POCOs annotate with [AdaptFrom]
, [AdaptTo]
, or [AdaptTwoWays]
, you can add [GenerateMapper]
in order to generate extension methods.
Example:
[AdaptTo("[name]Dto"), GenerateMapper] public class Student { ... }
Then Mapster will generate:
public class StudentDto { ... } public static class StudentMapper { public static StudentDto AdaptToDto(this Student poco) { ... } public static StudentDto AdaptTo(this Student poco, StudentDto dto) { ... } public static Expression<Func<Student, StudentDto>> ProjectToDto => ... }
Configuration
If you have configuration, it must be in IRegister
public class MyRegister : IRegister { public void Register(TypeAdapterConfig config) { config.NewConfig<TSource, TDestination>(); } }
Generate using configuration
You can also generate extension methods and add extra settings from configuration.
public class MyRegister : IRegister { public void Register(TypeAdapterConfig config) { config.NewConfig<TSource, TDestination>() .GenerateMapper(MapType.Map | MapType.MapToTarget); } }