2012-09-19 129 views
1

我有一個自定義類:無法從公共屬性映射到公共虛擬財產

public class Class1 { 
    public string Id { get; set; } 
    public MFileType DefaultFileType { get; set; } 
} 

,我試圖映射到:

public class Class2 { 
    public string Id { get; set; } 
    public virtual FileType DefaultFileType { get; set; } 
} 

我知道,我可以忽略的文件類型中ForMember()方法。

但是有可能將Class1映射到Class2的MFileType/FileType屬性?

我試着使用:

Mapper.CreateMap<Class1, Class2>() 
    .ForMember(dest => dest.FileType, opt => opt.MapFrom(src => src.MFileType)); 

但這不起作用。 Class2文件是由一個代碼工具生成的,所以我不能改變它。

這可能嗎?

+0

「MFileType」是「FileType」的子類型嗎?如果沒有,你是否嘗試創建一個'MFileType'到'FileType'的地圖? – Styxxy

+0

不,我認爲FileType是MFileType的子類型。 – coson

+0

請檢查'FileType'和'MFileType'之間的關係。知道'FileType'是'MFileType'的子項還是'MFileType'是'FileType'的子項(巨大差異!)是非常重要的。 – Styxxy

回答

1

好的,MFileType是(繼承)FileType的子類型。看看你的代碼,你的映射似乎並不正確,因爲你試圖在提供的類中映射dest.DefaultFileType(而不是dest.FileType)。如果你解決這個問題,它應該可以工作,如下面的演示代碼所示。

請注意,您應該添加對AutoMapper庫的引用,或者直接通過Nuget進行安裝。

class FileType 
{ 
    public int MyProperty { get; set; } 
} 
class MFileType : FileType 
{ 
    public int MyProperty2 { get; set; } 
} 

class Class1 
{ 
    public string Id { get; set; } 
    public MFileType DefaultFileType { get; set; } 
} 
class Class2 
{ 
    public string Id { get; set; } 
    public virtual FileType DefaultFileType { get; set; } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     AutoMapper.Mapper.CreateMap<Class1, Class2>() 
      .ForMember(dest => dest.DefaultFileType, opt => opt.MapFrom(src => src.DefaultFileType)); 

     var class1 = new Class1() { Id = "class1", DefaultFileType = new MFileType() { MyProperty = 1, MyProperty2 = 2 } }; 
     var class2 = AutoMapper.Mapper.Map<Class2>(class1); 

     Console.WriteLine("class2.Id = " + class2.Id); 
     // If below it says "False", it mapped correctly 
     Console.WriteLine("class2.DefaultFileType == null = " + class2.DefaultFileType == null); 

     Console.ReadLine(); 
    } 
} 
+0

對不起,關於後期添加。我可以發誓,我把這個標記爲正確的答案。 – coson

+0

@Coson沒問題:)。很高興我幫你。 – Styxxy

+0

2年,近500次觀看,但沒有投票。值得爲此付出正面的投票。無論如何,非常有幫助 – Ian