2010-12-15 13 views
6

मेरे पास क्लास नोड कुछ ऐसा है:सी #: चक्रीय लिंक के साथ नोड्स के xml serialization

class Node { 
    IEnumerable<Node> inputs; 
} 

जो मूल रूप से एक साधारण ग्राफ को परिभाषित करता है। मैं अपने ग्राफ को मानव-पठनीय रूप में क्रमबद्ध करना चाहता हूं, इसलिए आम तौर पर मैं कहूंगा कि एक्सएमएल जाने का रास्ता होगा। लेकिन एक्सएमएल को चक्रीय निर्भरताओं के साथ दिमाग में नहीं बनाया गया था :)

तो - मेरे ग्राफ के क्रमिकरण के लिए जाने का सबसे अच्छा तरीका क्या होगा?

मैं कुछ तरीकों से सोच सकता हूं:

  • डुबकी एक्सएमएल, अपना खुद का प्रारूप बनाएं।
  • एक्सएमएल का उपयोग करें, प्रत्येक नोड को एक अद्वितीय आईडी के साथ टैग करें, स्टोर कनेक्शन-सूचियों को नोड्स से अलग करें और

लोड करने के बाद हल करें लेकिन मुझे लगता है कि अन्य लोगों को पहले भी यही समस्या होनी चाहिए, इसलिए कुछ हो सकते हैं बेहतर विकल्प क्या किसी को ठोस दृष्टिकोण के बारे में पता है?

उत्तर

3

एक्सएमएल के लिए, मैं आईडी दृष्टिकोण के साथ जाऊंगा (डीटीओ मॉडल को बदलना जैसे कि चक्रीय नहीं है)।

ध्यान दें कि DataContractSerializer चक्रीय वस्तु रेखांकन स्वचालित रूप से अतिभारित कंस्ट्रक्टर्स में preserveObjectReferences विकल्प के लिए true में पास करके समर्थन कर सकते हैं; यह XmlSerializer आउटपुट जितना आसान नहीं होगा, लेकिन यह अभी भी पठनीय होगा।

1

आप WCF DataContractSerializer के लिए जाते हैं तो आपको ऑब्जेक्ट संदर्भ (3.5 सपा 1 में और बाद में)

[DataContract(IsReference=true)] 

Sowmy ऊपर एक अच्छा लिखने here

है रक्षा कर सकते हैं
संबंधित मुद्दे