2011-12-02 9 views
6

मैं इस बात को अनदेखा करने के लिए प्रोटोबफ-नेट का v2 कैसे प्राप्त कर सकता हूं कि मेरी कक्षा आईसीओलेक्शन, आईन्यूमेरेबल इत्यादि लागू करती है?आईन्यूमेरेबल/आईसीलेक्शन इंटरफेस को अनदेखा करने के लिए प्रोटोबफ-नेट फोर्स

इस विशेष परिदृश्य के लिए, मैं केवल उन क्षेत्रों को चाहता हूं जिन्हें मैंने [ProtoMember] को धाराबद्ध करने के लिए फ़्लैग किया है।


मैं वर्तमान में v2 का उपयोग करने के लिए प्रोटोबफ-नेट v1 का उपयोग करने से कनवर्ट करने की प्रक्रिया में परिवर्तित हूं। मेरे पास एक विशेष संरचना है जो अब बदलाव के कारण गलत तरीके से क्रमबद्ध है। यह तरह दिखता है निम्नलिखित: अधिक

"C:\h" 
└─── "appy.txt" 
└─── "istory.txt" 
की तरह कुछ में \ history.txt ":": \ happy.txt सी '' सी

[ProtoContract] 
public class FileTree : ICollection<FilePath>, IEnumerable<FilePath>, IEnumerable, INotifyCollectionChanged, INotifyPropertyChanged { 

    private FileTreeNode _Root; 

    [ProtoMember (1)] 
    public FileTreeNode Root { 
     get { return _Root; } 
     set { _Root = value; } 
    } 
} 

FileTree वर्ग की तरह फ़ाइल पथ संक्षिप्त करने के लिए लिखा गया था

संरचना पथ तारों में अनावश्यकता को समाप्त करती है। इसलिए, मैं वास्तव में नहीं चाहता कि फ़ाइल ट्री क्लास को आईनेमरेबल फ़ंक्शंस के माध्यम से क्रमबद्ध किया जा रहा है क्योंकि तब इसे "सी: \ happy.txt", "सी: \ history.txt", आदि के रूप में संग्रहीत किया जाता है। अभी, क्रमबद्धता में एक फ़ाइल ट्री ऑब्जेक्ट का, प्रत्येक पथ प्रिंट में पूर्ण हो रहा है।


संपादित करें: एक आखिरी बात मैं उल्लेख करना चाहिए - मैं FileTree में एक On_Deserialization समारोह जो [ProtoAfterDeserialization] के साथ टैग किया गया है। मैंने समारोह में ब्रेकपॉइंट लगाया, लेकिन यह हिट नहीं हो रहा है। क्या इस वर्ग से धारावाहिक होने के तरीके से संबंधित है?

+0

मुझे पता नहीं है कि यह v1 और v2 के बीच एक तोड़ने वाला परिवर्तन था; शायद सूक्ष्म अंतर यह है कि v1 'IList ', या 'IENumerable '** ** के साथ एक सार्वजनिक' जोड़ें 'के संयोजन के लिए अधिक देख रहा था। –

उत्तर

7
[ProtoContract(IgnoreListHandling = true)] 
public class FileTree : ICollection<FilePath> ... 
{ ... } 

इसे करना चाहिए। मैं ईमानदारी से नहीं सोचता कि मैंने सूचियों पर कॉलबैक माना है, क्योंकि उन्हें इकाइयों के लिए बहुत अलग तरीके से संभाला जाता है, लेकिन उपरोक्त के साथ काम करना चाहिए। अगर यह नहीं है तो मुझे बताएं।

IntelliSense प्रलेखन से:

हो जाता है या यह दर्शाता है कि इस प्रकार के एक सूची के रूप भले ही वह परिचित सूची की तरह लक्षण है नहीं माना जाना चाहिए, एक मूल्य के सेट (गणनीय, जोड़ने, आदि)

+0

धन्यवाद! जवाब देने के लिए खेद है जब उत्तर पूर्वदर्शी में इतना स्पष्ट था। मैं जवाब के लिए सभी गलत स्थानों में देख रहा था। – Amanduh

+0

@Amanduh जब आप उत्तर जानते हैं तो अधिकांश चीजें स्पष्ट होती हैं, हालांकि - यह एक अच्छा और वैध सवाल था, जो सौभाग्य से * एक सुविधाजनक उत्तर होता है (यह हाल ही में तब तक नहीं हुआ) –

+0

@MarcGravell ध्यान दें कि IgnoreListHandling विकल्प शायद थोड़ा अधिक [जटिल] (https://code.google.com/p/protobuf-net/issues/detail?id=287&q=IgnoreListHandling) में अपेक्षित काम नहीं कर सकता [परिदृश्य] (https://code.google। कॉम/पी/Protobuf शुद्ध/मुद्दों/विस्तार? id = 348 & q = IgnoreListHandling)। – tm1