2012-02-04 14 views
6

पर प्रोटोबफ-नेट ओवरराइटलिस्ट, मैं जो कर रहा हूं वह प्रोटोबफ-नेट के माध्यम से आईपीईंडपॉइंट भेजने का प्रयास कर रहा है और मैंने जो देखा है वह यह है कि आईपी 4 पते में 4 बाइट्स की सरणी को deserializing करते समय, सेट कोड 8 के मान प्राप्त करता है बाइट्स। चार बाइट्स जिसमें संरेखण पता होता है, और 4 और बाइट्स जिसमें क्रमबद्ध किया गया था। कोड के माध्यम से कदम से मैं पुष्टि करने में सक्षम हूं कि जब Deserialize कहा जाता है, यह पहले बाइट्स पढ़ता है, और फिर वे बाइट सेट करता है।बाइट ऐरे

कुछ पढ़ने के बाद मैंने ओवरराइटलिस्ट के बारे में सीखा, और जैसा कि नीचे दिए गए उदाहरण में देखा जा सकता है, मैंने इसे सत्य पर सेट कर दिया है। हालांकि सेटटर अभी भी एक 8 बाइट मूल्य प्रदान किया गया है।

क्या किसी के पास कोई सुराग है जो मैं गलत कर रहा हूं?

प्रोटोबफ-नेट आर 480, विजुअल स्टूडियो 2010 के साथ .NET 4.0 कंसोल एप्लिकेशन के रूप में उपयोग किए जाने पर इस नमूना कोड को अपवाद फेंकना चाहिए।

 
using ProtoBuf; 
using System.Net; 
using System.IO; 

namespace ConsoleApplication1 
{ 

    [ProtoContract] 
    class AddressOWner 
    { 
     private IPEndPoint endpoint; 

     public AddressOWner() 
     { endpoint = new IPEndPoint(new IPAddress(new byte[] {8,8,8,8}), 0); } 

     public AddressOWner(IPEndPoint newendpoint) 
     { this.endpoint = newendpoint; } 

     [ProtoMember(1, OverwriteList=true)] 
     public byte[] AddressBytes 
     { 
      get { return endpoint.Address.GetAddressBytes(); } 
      set { endpoint.Address = new IPAddress(value); } 
     } 
    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      AddressOWner ao = new AddressOWner(new IPEndPoint(new IPAddress(new byte[] { 192, 168, 1, 1 }), 80)); 

      MemoryStream ms = new MemoryStream(); 
      Serializer.Serialize(ms, ao); 
      byte[] messageData = ms.GetBuffer(); 
      ms = new MemoryStream(messageData); 
      AddressOWner aoCopy = Serializer.Deserialize<AddressOWner>(ms); 
     } 
    } 
} 
+0

समर्थन में आज शाम –

उत्तर

3

यह इस तरह दिखता है वास्तव में एक बग, byte[] के लिए विशिष्ट है, जो एक विशेष Protobuf आदिम रूप में नियंत्रित किया जाता है है। अन्य सरणी/सूचियों को repeated (प्रोटोबफ शर्तों में) में मैप किया गया है, और OverwriteList विकल्प सही तरीके से संभाल लें। मैं इस विकल्प का समर्थन करने के लिए byte[] हैंडलिंग को ट्विक कर दूंगा।

संपादित करें: इस integration test

+0

मैं स्रोत से निर्माण करने की कोशिश की जाँच करेंगे साथ r484 में तय हो गई है, और मैंने सोचा कि मैं सफल रहा था, लेकिन मैं अभी भी dll बनाया समान व्यवहार किया था। क्या कोई रिलीज शेड्यूल है? अभी के लिए मेरा काम संपत्ति सेटटर के दौरान दाएं बाइट्स को एक नई सरणी में कॉपी करना है। –

+0

@ विलियम जैसे ही मैंने कुछ अन्य सुधारों को मान्य किया है। –

+0

मैं Nuget से संस्करण 2.0.0.480 का उपयोग कर रहा हूं जिसमें यह बग शामिल है। एक नया पैकेज उपलब्ध होना अच्छा होगा, या कम से कम किसी प्रकार का कामकाज। –

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