Mar*_*usz 2 c# performance matlab json automapper
我正在尝试映射 C# 字典集合
IDictionary<string, object>
Run Code Online (Sandbox Code Playgroud)
转换为 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;
}
}
Run Code Online (Sandbox Code Playgroud)
我的字典保存单个值,如 int、string、float 等,但它可以保存另一个嵌套字典或列表数组。IE
IDictionary<string, IDictionary<string, object>>
Run Code Online (Sandbox Code Playgroud)
或者
IDictionary<string, List<object>>
Run Code Online (Sandbox Code Playgroud)
对于嵌套集合,我不知道如何递归地映射它们。
任何建议将不胜感激。
小智 5
您可以使用传递给转换方法的上下文对象进行递归映射。
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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3494 次 |
| 最近记录: |