मुझे एहसास हुआ कि इसका उत्तर दिया गया है, लेकिन मैंने एक अलग दृष्टिकोण का उपयोग किया और सोचा कि यह साझा करने लायक हो सकता है। इसके अलावा, मुझे लगता है कि मेरा दृष्टिकोण अवांछित उपरि का उत्पादन कर सकता है। हालांकि, मैं पर्यवेक्षक या कुछ भी गणना करने में सक्षम नहीं हूं जो कि हम जो भार देखते हैं उसके तहत बुरा है। मैं इस दृष्टिकोण पर किसी भी उपयोगी प्रतिक्रिया की तलाश में था।
गतिशीलता के साथ काम करने में समस्या यह है कि आप गतिशील वस्तु पर सीधे किसी भी कार्य को संलग्न नहीं कर सकते हैं। आपको ऐसा कुछ उपयोग करना है जो असाइनमेंट को समझ सके जो आप हर बार समझना नहीं चाहते हैं।
इस सरल समाधान की योजना बनाते समय, मैंने देखा कि वैध मध्यस्थों को समान वस्तुओं को फिर से टाइप करने का प्रयास करते समय क्या होता है। मैंने पाया कि एक बाइनरी सरणी, स्ट्रिंग (एक्सएमएल, जेसन) या हार्ड कोडिंग रूपांतरण (IConvertable) सामान्य दृष्टिकोण थे। मैं कोड रखरखाव कारक और आलस्य के कारण द्विआधारी रूपांतरण में नहीं आना चाहता हूं।
मेरा सिद्धांत यह था कि Newtonsoft स्ट्रिंग मध्यस्थ का उपयोग करके ऐसा कर सकता है।
नकारात्मक पक्ष के रूप में, मैं काफी हद तक निश्चित हूं कि स्ट्रिंग को किसी ऑब्जेक्ट में परिवर्तित करते समय, यह मिलान करने वाले गुणों के साथ किसी ऑब्जेक्ट के लिए वर्तमान असेंबली को खोजकर प्रतिबिंब का उपयोग करेगा, प्रकार बनाएं, फिर गुणों को तुरंत चालू करें, जिसके लिए आवश्यकता होगी अधिक प्रतिबिंब यदि सही है, तो इन सभी को टालने योग्य ओवरहेड माना जा सकता है।
सी #:
//This lives in a helper class
public static ConvertDynamic<T>(dynamic data)
{
return Newtonsoft.Json.JsonConvert.DeserializeObject<T>(Newtonsoft.Json.JsonConvert.SerializeObject(data));
}
//Same helper, but in an extension class (public static class),
//but could be in a base class also.
public static ToModelList<T>(this List<dynamic> list)
{
List<T> retList = new List<T>();
foreach(dynamic d in list)
{
retList.Add(ConvertDynamic<T>(d));
}
}
इसी के साथ
ने कहा, यह एक और उपयोगिता मैं एक साथ रख दिया मुझे एक गतिशील में किसी भी वस्तु की सुविधा देता है फिट बैठता है। मुझे पता है कि मुझे सही ढंग से ऐसा करने के लिए प्रतिबिंब का उपयोग करना था:
public static dynamic ToDynamic(this object value)
{
IDictionary<string, object> expando = new ExpandoObject();
foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(value.GetType()))
expando.Add(property.Name, property.GetValue(value));
return expando as ExpandoObject;
}
मुझे उस समारोह को पेश करना पड़ा। एक गतिशील टाइप किए गए चर को सौंपा गया एक मनमाना ऑब्जेक्ट को IDictionary में परिवर्तित नहीं किया जा सकता है, और कनवर्ट डायनामिक फ़ंक्शन को तोड़ देगा। इस फ़ंक्शन चेन का उपयोग करने के लिए इसे सिस्टम की गतिशीलता प्रदान की जानी चाहिए। डायनामिक.एक्सपांडाऑब्जेक्ट, या आईडीकी < स्ट्रिंग, ऑब्जेक्ट >।
क्या आप कह रहे हैं कि आपको गतिशील रूप से एक निहित या स्पष्ट रूपांतरण ऑपरेटर को कॉल करने की आवश्यकता है? – Gabe
या तो एक, लेकिन फिलहाल, –