0

I am attempting to serialize a List<Vehicle> of derived classes. I have an abstract class Vehicle which several classes extends.

The Vehicle class looks like this:

[Serializable]
    [XmlInclude(typeof(HyperloopTrain))]
    [XmlInclude(typeof(Tesla))]
    [XmlInclude(typeof(FalconHeavyRocket))]
    public abstract class Vehicle : IComparable
    {
        protected string name;
        protected float maxSpeedInKmPerHour;
        protected float weightInKg;
        protected float priceInDkk;

        public int CompareTo(object obj)
        {
            if (obj == null) return 1;

            Vehicle otherVehicle = obj as Vehicle;
            if(otherVehicle != null)
            {
                return this.name.CompareTo(otherVehicle.name);
            } else {
                throw new ArgumentException("Object is not a vehicle");
            }
        }
    }

And the Program where they are supposed to get serialized:

class Program
    {
        static void Main(string[] args)
        {
            var program = new Program();
            var instances = InstanceService<Vehicle>.GetInstances();
            program.SaveToDisk(instances);
        }

        private void PrintVehicles(IEnumerable<Vehicle> data)
        {
            List<Vehicle> vehicles = data.ToList();
            vehicles.Sort();

            foreach(var vehicle in vehicles)
            {
                Console.WriteLine(vehicle.ToString());
            }
        }

        private void SaveToDisk(IEnumerable<Vehicle> data)
        {
            List<Vehicle> vehicles = data.ToList<Vehicle>();

            SerializeObject<IEnumerable<Vehicle>>(vehicles, "vehicles.xml");
            Console.WriteLine("vehicles saved");
        }

        public void SerializeObject<T>(T serializableObject, string fileName)
        {
            if (serializableObject == null) { return; }

            try
            {
                XmlDocument xmlDocument = new XmlDocument();
                XmlSerializer serializer = new XmlSerializer(serializableObject.GetType());
                using (MemoryStream stream = new MemoryStream())
                {
                    serializer.Serialize(stream, serializableObject);
                    stream.Position = 0;
                    Console.WriteLine(stream.Position);
                    xmlDocument.Load(stream);
                    xmlDocument.Save(fileName);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
                throw;
            }

        }
    }

The code does not return any errors whatsoever, but does not create a file either (atleast not that I am aware of, what is the default save location?).

0 Answers0