2012-03-13 27 views
5

Chúng tôi đang cố gắng để ánh xạ một đối tượng - một Tridion Outbound Email liên hệ - trong đó có một từ điển tùy chỉnh loại tài sản với một nhà xây dựng nội bộ - ExtendedDetailCollectionMapping để một kiểu tùy chỉnh trong đó có một nhà xây dựng nội

Đó là lập bản đồ tốt từ đối tượng lên một ViewModel

Mapper.CreateMap<Contact,ContactViewModel>() 
    .ForMember(x=>x.Name, m=>m.MapFrom(x=>x.ExtendedDetails["Name"].StringValue)) 

nhưng theo cách khác không hoạt động

Chúng tôi đã cố gắng:

Mapper.CreateMap<ContactViewModel,Contact>() 
    .ForMember(x=>x.ExtendedDetails["Name"].Value, m => m.MapFrom(x=>x.Name)); 

nhưng điều đó sẽ ném ngoại lệ thời gian chạy.

Edit: Thông điệp của các ngoại lệ là:

AutoMapper.AutoMapperConfigurationException: cấu hình tuỳ chỉnh cho thành viên chỉ được hỗ trợ cho các thành viên cá nhân cấp cao nhất trên một loại.

Chúng tôi cũng đã thử các trình chuyển đổi loại khác nhau và các giá trị phân giải nhưng không cho phép chúng ta nhận được đối tượng đang được ánh xạ tới.

Mapper.CreateMap<ContactViewModel,Contact>() 
    .ForMember(x=>x.ExtendedDetails, m => ????); 

Có mẫu cho việc này hay dễ sử dụng phương pháp tĩnh hơn không?

+0

Ngoại lệ bạn đang nhận được là vấn đề mà AutoMapper không thể khởi tạo một thể hiện của từ điển đó? –

+0

Có thể điều này sẽ hữu ích. http://stackoverflow.com/questions/9110815/automapper-map-from-one-object-to-nested-objects Tôi đã sử dụng một Resolvers giá trị tùy chỉnh để ánh xạ từ các đối tượng bên trong. –

+0

@TrevorPilley Vâng, đó là vấn đề. Tôi sẽ cập nhật với ngoại lệ ngay bây giờ. Không có cách nào để khởi tạo từ điển chi tiết mở rộng trực tiếp và Trình giải quyết giá trị mong muốn tự tạo lớp nếu nó là một lớp. Tôi không thể tìm thấy một cách để vượt qua tài sản ExtendedDetails như là một giá trị ban đầu. –

Trả lời

1

Nếu ExtendedDetails là lớp bạn cần tạoMap cho lớp này và sau đó là thuộc tính cá nhân như Tên của lớp.

+0

Cảm ơn câu trả lời của bạn nhưng chúng tôi đã thử điều đó và nó không hoạt động vì các nhà xây dựng nội bộ. –

+0

Tôi đoán bạn nên yêu cầu Tridion thay đổi khả năng hiển thị của nhà xây dựng đó - hoặc tạo một số loại trình bao bọc xung quanh hàm tạo mà bạn có thể gọi. –

+0

@Ram, chúng tôi có thể thuyết phục bạn cam kết đề xuất trang web Tridion SE, trợ giúp của bạn sẽ được đánh giá cao http://area51.stackexchange.com/proposals/38335/tridion?referrer=gPujQMxthNCNn9xqeeO2NA2 –

Các vấn đề liên quan