की स्वचालित संपत्ति deserialization मुझे JSON में एक उचित सी # कक्षा में प्रतिनिधित्व की गई कुछ जावास्क्रिप्ट ऑब्जेक्ट को deserialize करने की आवश्यकता है। स्वचालित गुणों की अच्छी विशेषताओं को देखते हुए, मैं इन वर्गों में केवल फ़ील्ड होने के विरोध में उन्हें पसंद करना पसंद करूंगा। दुर्भाग्यवश, .NET serialization इंजन (कम से कम, डिफ़ॉल्ट रूप से) पूरी तरह से deserialization पर स्वचालित गुणों को अनदेखा करता है और केवल बैकिंग फ़ील्ड की परवाह करता है, जो स्पष्ट रूप से जावास्क्रिप्ट ऑब्जेक्ट में मौजूद नहीं है।सी # JSON
यह देखते हुए कि no standard way to name backing fields है और ईमानदार होने के लिए मैं "एक जावास्क्रिप्ट ऑब्जेक्ट बनाने की अनुमति देता हूं जो ऐसा लगता है कि इसमें सी # बैकिंग फ़ील्ड" दृष्टिकोण है क्योंकि यह थोड़ा गंदा लगता है, एकमात्र तरीका मैं कर सकता था सी # ऑटो-प्रॉपर्टीज में जावास्क्रिप्ट फ़ील्ड को क्रमबद्ध करें यदि मैं सीरियलाइजेशन इंजन को किसी भी तरह बैकिंग फ़ील्ड को अनदेखा कर सकता हूं और सीधे संपत्ति का उपयोग कर सकता हूं। दुर्भाग्य से, मैं यह नहीं समझ सकता कि यह कैसे किया जाता है या यदि यह बिल्कुल किया जा सकता है। किसी भी सुझाव की सराहना की जाएगी।
संपादित:
जावास्क्रिप्ट:
function Cat()
{
this.Name = "Whiskers";
this.Breed = "Tabby";
}
var cat = new Cat();
यह तो करने के लिए धारावाहिक है "{नाम: 'व्हिस्कर्स'}" यहाँ एक उदाहरण है।
सी # वर्ग:
[Serializable()]
public class Cat
{
public string Name { get; set; }
public string Breed { get; set; }
}
और अक्रमांकन कोड, यह काम नहीं करता:
new DataContractJsonSerializer(typeof(Cat)).ReadObject(inputStream);
और यह अपवाद से स्पष्ट है कि यह विफल रहता है, क्योंकि यह समर्थन क्षेत्र के लिए लग रही है।
EDIT2: यहाँ अपवाद है, कि अगर मदद करता है (कोई आंतरिक अपवाद):
System.Runtime.Serialization.SerializationException
"डेटा अनुबंध प्रकार 'Test.Cat' नहीं कर सकते deserialized हो क्योंकि आवश्यक डेटा सदस्यों '
<Name>k__BackingField, <Breed>k__BackingField
' नहीं मिला। "
क्या आप इसका मतलब बता सकते हैं कि आपका क्या मतलब है? –
@ जॉन सॉंडर्स - मान लें कि मुझे "बिल्ली" नामक एक जावास्क्रिप्ट ऑब्जेक्ट मिला है जिसे "नाम" नामक एक फ़ील्ड "व्हिस्कर्स" के साथ कहा जाता है। मान लें कि यह JSON में दर्शाया गया है। मैं इस जेएसओएन को पकड़ना चाहता हूं और सी # बिल्ली वर्ग (मेरे द्वारा लिखित) के उदाहरण के लिए इसे क्रमबद्ध करना चाहता हूं ताकि धारावाहिक प्रक्रिया "व्हिस्कर्स" के साथ उदाहरण के स्वचालित गुण "नाम" को पॉप्युलेट कर दे। –
... लेकिन समस्या यह है कि धारावाहिक बैकिंग फ़ील्ड की तलाश में है (उदाहरण के लिए " k_backingField" लेकिन इस नाम के साथ जरूरी नहीं है ") और नहीं" नाम "। –