我正在尝试映射C#词典集合
IDictionary<string, object>
转换为MATLAB中使用的特定对象(MWStructArray
和MWCellArray
)。该集合包含已解析的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>>
在嵌套集合的情况下,我不知道如何递归地映射它们。
任何建议将不胜感激。
您可以使用传递给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] 删除。
我来说两句