0

在我的 MVC web 应用程序中,我得到了以下自动映射器代码:

配置:

 public static void Configure()
        {
            Mapper.CreateMap<string, List<Ruimte>>().ConvertUsing<StringCombinatieRuimtesConverter>();
        }

自定义转换器:

public class StringCombinatieRuimtesConverter : ITypeConverter<string, List<Ruimte>>
    {
        #region Implementation of ITypeConverter<in string,out List<Ruimte>>

        public List<Ruimte> Convert(ResolutionContext context)
        {
            if (context.SourceValue == null)
            {
                return new List<Ruimte>();
            }

            return context.SourceValue.ToString().Split(',').Select(r => new Ruimte { Id = int.Parse(r) }).ToList();
        }

        #endregion
    }

我用以下代码调用它:

            var ruimteList = new List<Ruimte>();

            // Update the CombinatieVan
            Mapper.Map(command.CombinatieRuimteVan, ruimteList);

如果我调试 command.CombinatieRuimteVan 是:2,3,4,6。这可以。现在,如果我调试转换器,它会返回 4 个“Ruimte”类的对象,其 ID 为前面所述的数字。但是在 Mapper.Map 方法完成后,“ruimteList”仍然是一个空列表。

有谁知道这里出了什么问题?自动映射器在我的应用程序的另一个位置上运行良好,在该位置我自动映射包含“CombinatieRuimteVan”集的整个实体。但是当我单独将字符串转换为列表时,它似乎不起作用。

4

1 回答 1

0

在您的转换器中,您已将创建的对象实例添加到目标 List<>。List<> 应该可以通过 context.DestinationValue 访问。如果您不考虑 context.DestinationValue,则您的映射对象仅作为 Map() 方法的结果返回。您的转换器应该看起来像这样:

public class StringCombinatieRuimtesConverter : ITypeConverter<string, List<Ruimte>>
{
    #region Implementation of ITypeConverter<in string,out List<Ruimte>>

    public List<Ruimte> Convert(ResolutionContext context)
    {
        if (context.SourceValue == null)
        {
            return new List<Ruimte>();
        }

        var list = context.SourceValue.ToString().Split(',').Select(r => new Ruimte { Id = int.Parse(r) }).ToList();
        List<Ruimte> destinationList = context.DestinationValue as List<Ruimte>;
        if (destinationList != null)
        {
            destinationList.AddRange(list);
        }
        return list;
    }

    #endregion
}
于 2012-11-07T09:40:36.270 回答