2012-09-11 29 views
5

मैं विंडोज फोन में BinaryFormatter का उपयोग कैसे कर सकते हैं 7.विंडोज फोन में BinaryFormatter का उपयोग कैसे करें 7

मैं service1.svc.cs में इस using System.Runtime.Serialization.Formatters.Binary का उपयोग, लेकिन मैं विंडोज फोन में इस संदर्भ का उपयोग नहीं कर सकते हैं 7.

क्या इसका कोई समाधान है?

मेरे कोड DeserializeObject

public static T DeserializeObject<T>(byte[] xml) 
    { 
     BinaryFormatter xs = new BinaryFormatter(); 
     MemoryStream memoryStream = new MemoryStream(xml); 
     return (T)xs.Deserialize(memoryStream); 
    } 

लिए BinaryFormatter विंडोज फोन 7 में त्रुटि देता है तो मैं कैसे deserialize कर सकते हैं। मुझे इस कोड में क्या परिवर्तन करना है?

+0

लिखित रूप में आपकी सेवा के साथ कोई समाधान नहीं है। आपको एक सीरियलाइजेशन प्रारूप का उपयोग करने के लिए सेवा को बदलना होगा जो कि विंडोज फोन 7 में समर्थित है। यदि आपकी सेवा डब्ल्यूसीएफ है तो आप डेटाकंट्रैक्टसेरियलाइज़र का उपयोग क्यों नहीं कर रहे हैं और डब्ल्यूसीएफ को सीरियलाइजेशन/डेसेरियलाइजेशन को संभालने की अनुमति क्यों दे रहे हैं? –

उत्तर

2

BinaryFormatter विंडोज फोन में समर्थित नहीं है 7.

+0

उत्तर के लिए धन्यवाद तो मैं कैसे उपयोग कर सकता हूं? –

+0

आप नहीं कर सकते। आपको एक सीरियलाइजेशन इंजन पर स्विच करने की आवश्यकता है जो दोनों प्लेटफार्मों पर समर्थित है। शायद प्रोटोबफ-नेट, कुछ और जानकारी के लिए यहां स्वीकृत उत्तर देखें: http://stackoverflow.com/questions/5091712/binaryformatter-does-not-exist-in-cf-solutions – driis

+0

क्या आप कृपया अपना कोड देख सकते हैं। –

6

जैसा कि बताया जा @driis, आप विंडोज फोन पर BinaryFormatter उपयोग नहीं कर सकते। आप डब्ल्यूसीएफ एंडपॉइंट में बाइनरी एन्कोडिंग का उपयोग कर सकते हैं (यानी, एक एंडपॉइंट जिसका बाध्यकारी BinaryMessageEncodingBindingElement और HttpTransportBindingElement के साथ एक कस्टम बाध्यकारी है), और यह WP7 पर समर्थित होगा। आप बस बाइनरी फॉर्मेटर का उपयोग नहीं कर सकते हैं।

अद्यतन टिप्पणी निम्नलिखित: अपने कोड को देखते हुए, यह है कि कोड है कि बदलने की आवश्यकता न केवल है - आप एक प्रारूप है जो में समर्थित है में एक वस्तु को क्रमानुसार करने के साथ-साथ सेवा कोड को बदलने की आवश्यकता सिल्वरलाइट। आप एक बाइनरी रीडर/लेखक के साथ DataContractSerializer का उपयोग कर सकते हैं, या आप दोनों स्थितियों में समर्थित एक और लाइब्रेरी का उपयोग कर सकते हैं। उदाहरण के लिए, नीचे दिए गए कोड डेस्कटॉप और SL संस्करणों में काम करना चाहिए:

public static T DeserializeObject<T>(byte[] xml) 
{ 
    using (MemoryStream memoryStream = new MemoryStream(xml)) 
    { 
     using (XmlDictionaryReader reader = XmlDictionaryReader.CreateBinaryReader(
      memoryStream, XmlDictionaryReaderQuotas.Max)) 
     { 
      DataContractSerializer dcs = new DataContractSerializer(typeof(T)); 
      return (T)dcs.ReadObject(reader); 
     } 
    } 
} 

और सर्वर पर:

public static byte[] SerializeObject<T>(T obj) 
{ 
    using (MemoryStream ms = new MemoryStream()) 
    { 
     using (XmlDictionaryWriter writer = XmlDictionaryWriter.CreateBinaryWriter(ms)) 
     { 
      DataContractSerializer dcs = new DataContractSerializer(typeof(T)); 
      dcs.WriteObject(writer, obj); 
      writer.Flush(); 
      return ms.ToArray(); 
     } 
    } 
} 
+0

क्या आप कृपया अपना कोड –

+0

देख सकते हैं यह कोड मुझे इस तरह की त्रुटि देता है। संदेश = "टाइप करें" System.Net.PathList 'डेटा अनुबंध नाम के साथ' पथसूची: http: //schemas.datacontract.org/2004/07/System.Net ' अपेक्षित नहीं है।DataContractResolver का उपयोग करने पर विचार करें या ज्ञात प्रकारों की सूची में स्थिर रूप से ज्ञात किसी भी प्रकार को जोड़ें –

+0

आप किस प्रकार की ऑब्जेक्ट को क्रमबद्ध करने की कोशिश कर रहे हैं? – carlosfigueira

0

WP 7.1 पर द्विआधारी क्रमांकन के लिए कोई पुस्तकालय समर्थन नहीं है। जैसा कि सूखे का उल्लेख है।

इसके बजाए आपको इसके बजाय XmlObjectSerializer का उपयोग करना चाहिए, या यहां तक ​​कि इसके उप-वर्गों में से एक भी जो सामान्य डेटा ऑब्जेक्ट्स जैसे सीरियलाइजेशन का समर्थन करता है, जैसे संपर्क डेटा, या ऐसे।

यदि आपने System.Runtime.Serialization नेमस्पेस असेंबली (विजुअल स्टूडियो के ऑब्जेक्ट ब्राउज़र में पूर्व) की जांच की है तो आपको पर्याप्त कक्षाओं का पदानुक्रम मिलेगा।

और आप धारावाहिक विधि के बारे में क्यों परवाह करते हैं? एक्सएमएल क्रमबद्धता अधिक पोर्टेबल, मानव द्वारा पढ़ने के लिए अधिक समान और आसान है।

+0

मैं नया हूं इसलिए मुझे नहीं पता कि मैं इसका उपयोग कैसे करूं, मेरे प्रश्न में मेरे कोड को पोस्ट करें –

+0

कार्लोसफिगीरा ने आपके संदेहों को दूर करने के लिए एक बहुत ही समझदार उत्तर पोस्ट किया है। अपने समाधान का उपयोग करें क्योंकि यह अच्छा दिखता है (http://stackoverflow.com/a/12376808/1598508)। –

+0

यह काम नहीं करता है यह त्रुटि देता है –