You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
public class Source
{
public int? IntValue { get; set; }
public string StringValue { get; set; } = "Some Value";
}
public class Destination
{
public string Mapped { get; set; } = string.Empty;
}
The task is put in Mapped string representation of IntValue if it's not null, otherwise use StringValue. I assume configuration should look like (according to Mapster docs):
Mapster.CompileException: Error while compiling
source=Source
destination=Destination
type=Map
---> System.InvalidOperationException: No coercion operator is defined between types 'System.Nullable`1[System.Int32]' and 'System.String'.
Is it intended behavior or it's a bug? How to perform conditional mapping in given case Mapster way, without slapping .AfterMapping() and do it with custom code?
The text was updated successfully, but these errors were encountered:
The boolean conditional will be evaluated at runtime so the mapping when the int has a value needs to be defined to create a string from a nullable int.
Sad it's not possible. Because in real life it's not just int, string and .ToString().... it's a big hierarchy of POCO classes with their own async mapping configs with DI.
I was thinking that this config would be roughly compiled into something like:
if (conditionFunc1(src)) {
destExpr.SetValue(srcExpr1.GetValue().Adapt<TDest>())
return;
}
destExpr.SetValue(srcExpr2.GetValue().Adapt<TDest>())
But seems like it's not. guess no other way that put everything into .AfterMappingAsync():
For example there are 2 classes:
The task is put in
Mapped
string representation ofIntValue
if it's not null, otherwise useStringValue
. I assume configuration should look like (according to Mapster docs):But it gives runtime exception:
Is it intended behavior or it's a bug? How to perform conditional mapping in given case Mapster way, without slapping
.AfterMapping()
and do it with custom code?The text was updated successfully, but these errors were encountered: