2010-03-09 14 views
10

मैं XSD.exe-उत्पन्न डेटा अनुबंध वर्ग है जो सभी वैकल्पिक तत्वों की मैं मानचित्रण के मैदान के दूसरी ओर की तरहAutoMapper और है * निर्दिष्ट गुण

int Amount {get; set;} 
bool isAmountSpecified {get; set;} 

सी # गुण की एक जोड़ी है का एक समूह है जैसे

int? Amount {get; set;} 

एक नल पूर्णांक आदर्श रूप में मुझे पसंद है AutoMapper इस तरह के प्रतिमानों की पहचान और पता है मुझे प्रत्येक व्यक्ति के संपत्ति के लिए एक मानचित्रण निर्दिष्ट किए बिना ही दोनों दिशाओं में बातें मैप करने के लिए कैसे करने के लिए सक्षम होने के लिए के लिए चाहते हैं। क्या यह संभव है?

+0

मुझे लगता है कि यह http://valueinjecter.codeplex.com/documentation में मदद कर सकता है, आपको int int int के लिए केवल मैपिंग एल्गोरिदम निर्दिष्ट करना होगा? एक बार और जो कुछ भी आपको चाहिए, उसके लिए इसका उपयोग करें, आपको – Omu

उत्तर

1

मुझे ईमानदारी से पता नहीं है कि ऑटोमैपर ऐसा करेगा (क्योंकि मैं ऑटोमैपर का अधिक उपयोग नहीं करता), लेकिन मुझे पता है कि प्रोटोबफ-नेट उन दोनों पैटर्न का समर्थन करता है, ताकि आप Serializer.ChangeType<,>(obj) का उपयोग उनके बीच फ़्लिप करने के लिए कर सकें।

वर्तमान संस्करण, सदस्यों पर विशेषताओं (जैसे [XmlElement(Order = n)]) पर निर्भर होने पर बहुत निर्भर है - मुझे नहीं पता कि इससे कोई समस्या क्यों आती है? प्रगति में संस्करण वेनिला प्रकारों (गुणों के बिना) का समर्थन करता है, लेकिन यह अभी तक पूरा नहीं हुआ है (लेकिन जल्द ही)।

उदाहरण:

[XmlType] 
public class Foo 
{ 
    [XmlElement(Order=1)] 
    public int? Value { get; set; } 
} 
[XmlType] 
public class Bar 
{ 
    [XmlElement(Order = 1)] 
    public int Value { get; set; } 
    [XmlIgnore] 
    public bool ValueSpecified { get; set; } 
} 
static class Program 
{ 
    static void Main() 
    { 
     Foo foo = new Foo { Value = 123 }; 
     Bar bar = Serializer.ChangeType<Foo, Bar>(foo); 
     Console.WriteLine("{0}, {1}", bar.Value, bar.ValueSpecified); 

     foo = new Foo { Value = null }; 
     bar = Serializer.ChangeType<Foo, Bar>(foo); 
     Console.WriteLine("{0}, {1}", bar.Value, bar.ValueSpecified); 

     bar = new Bar { Value = 123, ValueSpecified = true }; 
     foo = Serializer.ChangeType<Bar, Foo>(bar); 
     Console.WriteLine(foo.Value); 

     bar = new Bar { Value = 123, ValueSpecified = false }; 
     foo = Serializer.ChangeType<Bar, Foo>(bar); 
     Console.WriteLine(foo.Value); 
    } 
} 
+0

@Marc के प्रत्येक जोड़ी के लिए मानचित्र बनाने की ज़रूरत नहीं है, जानकारी के लिए धन्यवाद - मुझे प्रोटोबफ-नेट के बारे में पता नहीं था, मैं एक नज़र डालेगा। –

2

ठीक है, कल मैं जिमी Bogard, AutoMapper के लेखक के साथ एक संक्षिप्त चर्चा मिला है, और मूल रूप से मैं क्या तलाश कर रहा हूँ वर्तमान में संभव नहीं है। इस तरह के सम्मेलनों के लिए समर्थन भविष्य में कुछ समय लागू किया जाएगा (अगर मैं उसे सही ढंग से समझ गया :))।

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