Esempio n. 1
0
        public static void CyclicSerialization()
        {
            // Ustvarimo tri vozlišča drevesa
            Node <string> root = new Node <string>()
            {
                Value = "startek"
            };
            Node <string> leftSon = new Node <string>()
            {
                Value = "levi sinek"
            };
            Node <string> leftleftSon = new Node <string>()
            {
                Value = "levi levi sinek"
            };
            Node <string> rightSon = new Node <string>()
            {
                Value = "desni sinek"
            };

            // Ciklična odvisnost po tipih ni problematična.
            root.Left    = leftSon;
            root.Right   = rightSon;
            leftSon.Left = leftleftSon;

            // Če pa dodamo ciklično odvisnost po instancah, naletimo na težavo.
            // Klicu serializacije moramo povedati, naj vodi reference na posamezne instance
            leftSon.Parent     = root;
            rightSon.Parent    = root;
            leftleftSon.Parent = leftSon;

            // S spodnjo nastavitvijo vsak objekt dobi svoj ID, po katerem ga serializator prepozna
            var serSettings = new DataContractSerializerSettings()
            {
                PreserveObjectReferences = true
            };

            SerializationBasics.SerializeObject <Node <string> >(root, "root.xml", serSettings);
            SerializationBasics.SerializeObject <Node <string> >(leftSon, "leftSon.xml", serSettings);

            Console.WriteLine("Objekt je uspešno serializiran.");

            // Naredimo še deserializacijo
            Node <string> newRoot = SerializationBasics.DeserializeObject <Node <string> >("root.xml");

            Console.WriteLine($"Objekt je uspešno deserializiran: {newRoot.Value}");

            // Podobno kot s cikli lahko upravljamo z instancami abstraktnih razredov ali vmesnikov
        }
Esempio n. 2
0
        static void Main(string[] args)
        {
            switch (InterfaceFunctions.ChooseSection <SerializationSections>())
            {
            case SerializationSections.Serialize:
                SerializationBasics.Serialize();
                break;

            case SerializationSections.Deserialize:
                SerializationBasics.Deserialize();
                break;

            case SerializationSections.Cyclic:
                CyclicDependencies.CyclicSerialization();
                break;
            }

            Console.ReadLine();
        }
        static void Main(string[] args)
        {
            Section section = Section.Cyclic;

            switch (section)
            {
            case Section.Serialize:
                SerializationBasics.Serialize();
                break;

            case Section.Deserialize:
                SerializationBasics.Deserialize();
                break;

            case Section.Cyclic:
                CyclicDependencies.CyclicSerialization();
                break;
            }

            Console.ReadLine();
        }