2009-04-17 13 views
5

मैंने एक कस्टम सीरियलाइजेशन दिनचर्या लिखी है जो मेरी ऑब्जेक्ट को फ़ाइल में सहेजने के लिए आईएसरियलज़ेबल या सीरियलज़ेबलएट्रिब्यूट का उपयोग नहीं करती है।.NET remoting के दौरान कस्टम serialization का उपयोग कैसे करें?

मैं इन वस्तुओं को भी रिमोट करता हूं और उसी क्रमबद्धता तकनीक का उपयोग करना चाहता हूं। हालांकि, मैं ISerializable को लागू नहीं करना चाहता क्योंकि मेरी serialization विधि पूरी तरह से मेरी वस्तुओं से decoupled है (और मैं इसे इस तरह रहने के लिए चाहते हैं)।

क्या कोई आसान तरीका है (संभवतः सिंक को रिमोट करने के साथ) जहां मैं एक स्ट्रीम ले सकता हूं और बाइट्स लिख सकता हूं और दूसरी ओर से बाइट्स पढ़ सकता हूं, .NET में सीरियलाइजेशन फ्रेमवर्क को छोड़ सकता हूं?

उत्तर

3

यदि आप को रीमोट करना चाहते हैं तो आप BinaryFormatter तक सीमित हैं। आम तौर पर, आप फॉर्मेटर से अलग एक सीरिएलाइज़र प्रदान करने के लिए "सीरियलाइजेशन सरोगेट" का उपयोग कर सकते हैं, लेकिन AFAIK यह .NET रीमोटिंग के साथ काम नहीं करता है।

हालांकि; यदि आप अपना स्वयं का आरपीसी स्टैक लिखते हैं (उदाहरण के लिए टीसीपी/आईपी या HTTP पर), तो आपके पास बहुत अधिक नियंत्रण होगा। समान रूप से, डब्ल्यूसीएफ के साथ आप एक व्यवहार के माध्यम से धारावाहिक को प्रतिस्थापित कर सकते हैं। मैं इन दोनों चालों का उपयोग protobuf-net (डब्ल्यूसीएफ हुक are here) में करता हूं।

सुनिश्चित नहीं है कि आप को रीमोट करने के साथ ऐसा कर सकते हैं - आपको शायद ISerializable का उपयोग करना होगा।

1

यदि आप अपनी प्रक्रियाओं के बीच स्ट्रीमिंग बाइट्स के साथ स्पष्ट रूप से निपटना चाहते हैं, तो पाइप का उपयोग करें। यहां named pipes पर एक प्रारंभ करने वाला है, Google के पास भी बहुत कुछ है।

+1

या यदि आप .NET 3.5 या उच्चतर हैं, तो आप System.IO.Pipes का उपयोग कर सकते हैं। –

1

आप IClientFormatterSinkProvider & IServerFormatterSinkProvider को लागू करने और चैनल फ़ॉर्मेटर (उदा via configuration) कॉन्फ़िगर कर सकते हैं।

कार्यान्वयन विवरण के लिए बाइनरीसेवरफॉर्मेटर सिंकप्रोवाइडर/बाइनरीसेवरफॉर्मेटर सिंक और बाइनरी क्लाइंटफॉर्मेटर सिंकप्रोवाइडर/बाइनरी क्लाइंटफॉर्मेटर सिंक देखें।

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