AutoMapper自定义类型转换器ITypeConverter和映射嵌套对象

马里乌斯

我正在尝试映射C#词典集合

IDictionary<string, object>

转换为MATLAB中使用的特定对象(MWStructArrayMWCellArray)。该集合包含已解析的JSON结构。

为此,我使用AutoMapper及其ITypeConverter实现,目前看起来像这样:

Mapper.Initialize(cfg =>
{
    cfg.CreateMap<IDictionary<string, object>, MWStructArray>().ConvertUsing(new MWStructArrayTypeConverter());
});
Mapper.AssertConfigurationIsValid();


public class MWStructArrayTypeConverter : ITypeConverter<IDictionary<string, object>, MWStructArray>
{
    public MWStructArray Convert(ResolutionContext context)
    {
        var dictionary = context.SourceValue as Dictionary<string, object>;
        var mwStructArray = new MWStructArray(1, 1, dictionary.Keys.ToArray());

        foreach (KeyValuePair<string, object> entry in dictionary)
        {
            mwStructArray[entry.Key, 1] = entry.Value.ToString();
        }

        return mwStructArray;
    }
}

我的字典包含int,string,float等单个值,但它可以包含另一个嵌套的字典或List数组。IE

IDictionary<string, IDictionary<string, object>>

或者

IDictionary<string, List<object>>

在嵌套集合的情况下,我不知道如何递归地映射它们。

任何建议将不胜感激。

efredin

您可以使用传递给convert方法的上下文对象来进行递归映射。

public MWStructArray Convert(ResolutionContext context)
    {
        var dictionary = context.SourceValue as Dictionary<string, object>;
        var mwStructArray = new MWStructArray(1, 1, dictionary.Keys.ToArray());

        foreach (KeyValuePair<string, object> entry in dictionary)
        {
            if (entry.Value is IDictionary)
            {
                mwStructArray[entry.Key, 1] = context.Mapper.Map<MWStructArray>(entry.Value)
            }
            else
            {
                mwStructArray[entry.Key, 1] = entry.Value.ToString();
            }
        }

        return mwStructArray;
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用自定义转换器映射对象类型

AutoMapper-如何在自定义类型转换器中使用自定义值解析器

Automapper使用简单注入器(Ioc)将依赖项注入到自定义类型转换器中

Spring Cache抽象和自定义转换器

自定义JSON转换器可帮助反序列化为确切原始类型的对象

用于在 Blazor 和 JS 之间传递 DateTimeOffset 的自定义 Json 转换器。JS 属性 Input/Output 是不同的类型

将 CsvHelper 自定义转换器应用于特定的类映射字段

使用 ReverseMap 和自定义值解析器,从多个属性到复杂对象的 AutoMapper 映射失败

自定义Struts类型转换器不起作用

未使用自定义HTTP消息转换器,未支持的媒体类型为415

jOOQ查询表达式类型安全,无需自定义转换器

将模型转换器添加到自定义表单类型(仅父表单)

WinForms PropertyGrid 如何在外部库中找到自定义类型转换器?

绑定自定义数据类型将null传输到转换器

使用推土机的自定义转换器将对象列表映射到另一个列表

在selectCheckboxMenu中对自定义对象使用转换器不起作用

Morphia自定义转换器:是否可以将嵌套的Java对象的字段直接插入父文档中?

Sklearn自定义转换器:使用FunctionTransformer和子类化TransformerMixin之间的区别

sklearn管道的自定义转换器,可同时更改X和y

scikit-learn更改X和Y的自定义转换器/管道

使用 TypeScript 自定义转换器和项目参考

所有枚举的Spring自定义转换器

Typesafe的配置是否支持自定义转换器?

春季启动:注册mongodb自定义转换器

AngularJS - 为视图创建自定义转换器

OpenCSV-注册自定义转换器

Maven Shade插件自定义转换器

自定义转换器的Jooq结果

未触发ModelMapper中的自定义转换器