【发布时间】:2017-03-15 23:03:44
【问题描述】:
我正在尝试映射 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 数组。即
IDictionary<string, IDictionary<string, object>>
或
IDictionary<string, List<object>>
如果是嵌套集合,我不知道如何递归地映射它们。
任何建议将不胜感激。
【问题讨论】:
-
您能否在 MATLAB 中提供输入 JSON 和所需输出的小样本?您是否仅限于 C# 或者您可以使用其他语言(也许 python、mex 或 java 接口会有所帮助)?如果您的数据结构是统一的,也许可以为您的特定模式编写一个解析器,它可以快速运行......
-
感谢您的关注。 efredin 已经提供了可行的解决方案。我测试了它,它是完美的。我还没有彻底测试它,但到目前为止我所做的很少有测试表明解析时间至少下降了 10 倍,这非常令人满意。
-
好吧,我测试了它并调用: context.Mapper.Map
(entry.Value) 抛出一个关于无法将 JObiect 映射到 MWArray 的异常
标签: c# json matlab performance automapper