वेब एपीआई 2.2 का उपयोग करके, मान लीजिए कि मैं HttpContent
से दो बार अलग-अलग प्रकार के रूप में पढ़ना चाहता हूं।HttpContent के लिए एकाधिक कॉल ReadAsAsync
await httpContent.LoadIntoBufferAsync(); //necessary to buffer content for multiple reads
var X = await httpContent.ReadAsAsync<T>(); //read as first type
var Y = await httpContent.ReadAsAsync<Dictionary<string, object>>(); //read as second type
जब मैं ऊपर कोड चलाने के लिए, X
की T
जबकि Y
बातिल है एक गैर-शून्य उदाहरण है। अगर मैं ऑर्डर स्विच करता हूं, Y
एक गैर-शून्य शब्दकोश होगा जबकि X
शून्य होगा। दूसरे शब्दों में, ReadAsAsync
पर दूसरी और बाद की कॉल हमेशा शून्य हो जाएगी जब तक कि उन्हें समान जेनेरिक प्रकार पैरामीटर के साथ बुलाया न जाए। स्वतंत्र रूप से, या तो ReadAsAsync
पर कॉल की अपेक्षा की जाती है (भले ही LoadIntoBufferAsync
को कॉल करने की आवश्यकता हो)।
यह मेरे लिए अप्रत्याशित है - ऐसा लगता है कि मुझे बफर सामग्री को कई बार अलग-अलग प्रकार के रूप में पढ़ने में सक्षम होना चाहिए। मैं एक और लाइन जोड़ देते हैं तो:
var Z = await httpContent.ReadAsString();
परिणाम Z
एक गैर-शून्य स्ट्रिंग, कोई फर्क नहीं पड़ता X, Y, Z
असाइनमेंट के आदेश हो जाएगा।
तो यह कैसे होता है, और HttpContent
से ReadAsAsync
का उपयोग करके मैं कई प्रकार के साथ क्यों नहीं पढ़ सकता?
नोट: आपको आश्चर्य हो सकता है कि मैं ऐसा क्यों कर रहा हूं। मैं वेब एपीआई में आंशिक अपडेट/'पैच' को लागू करने के लिए अंततः किन संपत्तियों को 'टी' से बांधने के लिए एक सरल विधि तैयार करने की कोशिश कर रहा हूं। एक शब्दकोश में पढ़ने का दूसरा दौर मुझे सबमिट किए गए डेटा के साथ ओवरराइट करने के लिए कुंजी (संपत्ति नाम) की एक सूची देता है। मुझे ओडाटा 'डेल्टा' कक्षा से अवगत है, लेकिन दुर्भाग्यवश यह ओडाटा नियंत्रकों के बाहर सही ढंग से काम नहीं कर रहा है। http://stackoverflow.com/questions/15561874/deltat-in-patch-actions-not-tracking-primitive-types –