2011-12-06 14 views
20

के बजाय शून्य-लंबाई सरणी में सेट करता है, मैं एक उदाहरण से दूसरे में मूल्यों की प्रतिलिपि बनाने के लिए ऑटोमैपर का उपयोग कर रहा हूं, और मुझे लगता है कि यदि कक्षा में सरणी संपत्ति है, और स्रोत उदाहरण है संपत्ति null पर सेट है, ऑटोमैपर गंतव्य अनुमान को null के बजाय शून्य-लंबाई सरणी में सेट करता है जैसा कि मैंने अपेक्षित था।ऑटोमैपर एक सरणी प्रॉपर्टी को शून्य

क्या स्रोत null पर गंतव्य सेट करने के लिए गंतव्य को null पर सेट करने के लिए ऑटोमैपर कॉन्फ़िगर करने का कोई तरीका है?

public class Test 
{ 
    public byte[] ByteArray { get; set; } 
    public int? NullableInt { get; set; } 
    public int Int { get; set; } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     Mapper.CreateMap<Test, Test>(); 

     var test1 = new Test { Int = 123, NullableInt = null, ByteArray = null }; 
     var test2 = Mapper.Map<Test>(test1); 

     // test1: Int == 123, NullableInt == null, ByteArray == null 
     // test2: Int == 123, NullableInt == null, ByteArray == byte[0] <-- expect this to be null 
    } 
} 

उत्तर

35

मुझे पता चला कि यह पहले से ही issue के रूप में रिपोर्ट किया गया था, और एक नया कॉन्फ़िगरेशन विकल्प जोड़ा गया था (यह commit देखें)। इस समय, विकल्प NuGet के माध्यम से रिहाई उपलब्ध में नहीं है, लेकिन मैं जब तक अगले संस्करण जारी किया गया है इस संभाल करने के लिए एक तरह से यह पता लगाने में सक्षम था:

Mapper.CreateMap<Test, Test>() 
    .ForMember(t => t.ByteArray, opt => opt.ResolveUsing(t => t.ByteArray == null ? null : t.ByteArray)); 

अद्यतन:

संस्करण 2.1.265.0 के रूप में, आप AllowNullCollections संपत्ति का उपयोग कर सकते हैं:

Mapper.Configuration.AllowNullCollections = true; 
Mapper.CreateMap<Test, Test>(); 
+2

अद्यतन के लिए धन्यवाद! – hB0

+0

यह वैश्विक स्तर पर काम नहीं करता प्रतीत होता है। – DonO

0

मुझे लगता है कि यह सिर्फ दोनों स्रोत और गंतव्य के लिए ठीक उसी प्रकार का उपयोग करने से एक मोड़ है:

मामले में मेरी व्याख्या स्पष्ट नहीं है, निम्नलिखित कोड मैं क्या वर्णन करने के लिए कोशिश कर रहा हूँ को दिखाता है। यदि आप वास्तव में उन्हें विभिन्न प्रकार बनाते हैं, तो बाइट सरणी शून्य के रूप में आती है।

+0

मैं एक ही सोचा, और एक वर्ग के 'Target',' Test' रूप में एक ही गुण, मैप किया 'Test' को' Target' और बनाया सरणी संपत्ति अभी भी बीन थी जी शून्य-लंबाई सरणी पर सेट है। –

+0

ऑटोमैपर का 1.7x या 2.x संस्करण क्या है? मुझे लगता है कि मैंने 2.x के तहत परीक्षण किया और मेरी गंतव्य कक्षा बाइट [] के लिए एक शून्य हो गई। – PatrickSteele

+0

2.0 - NuGet –

संबंधित मुद्दे