Ich möchte ein POCO in eine ImmutableDictionary<string, object>
abbilden, und Automapper löst eine Ausnahme aus, da die Operation Add
in ImmutableDictionary
nicht unterstützt wird.Fehler beim Zuordnen von ImmutableDictionary mit AutoMapper
Das POCO-Objekt befindet sich in der Eigenschaft Data
im Quelltyp, die der Eigenschaft DataBag
im Ziel zugeordnet wird. Der Typ der Data
ist zu diesem Zeitpunkt nicht bekannt.
Ich verwende diese Zuordnung:
var t = new MapperConfiguration(cfg =>
cfg.CreateMap(@event.GetType(), typeof(StoredEvent))
.ForMember("DataBag", opt => opt.MapFrom("Data")));
und immer diese Fehlermeldung:
Mapping types:
Dictionary`2 -> ImmutableDictionary`2
System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] -> System.Collections.Immutable.ImmutableDictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]
Destination path:
StoredEvent.DataBag.DataBag.DataBag
Um dies zu lösen, habe ich versucht, einen benutzerdefinierten Resolver zu verwenden:
public class ImmutableDictionaryResolver : IValueResolver
{
public ResolutionResult Resolve(ResolutionResult source)
{
var dictionary = Mapper.Map<Dictionary<string, object>>(source.Value);
return source.New(dictionary.ToImmutableDictionary());
}
}
Mit diesem Zuordnung:
var t = new MapperConfiguration(cfg =>
cfg.CreateMap(@event.GetType(), typeof(StoredEvent))
.ForMember(nameof(StoredEvent.DataBag), opt =>
opt.ResolveUsing<ImmutableDictionaryResolver>().FromMember("Data")));
Aber ich bekomme immer noch den gleichen Fehler. Im zweiten Fall, es Beschwerden mit diesem:
Mapping types:
ImmutableDictionary`2 -> ImmutableDictionary`2
System.Collections.Immutable.ImmutableDictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] -> System.Collections.Immutable.ImmutableDictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]
Destination path:
StoredEvent.DataBag.DataBag