Help with custom Serialization

Tech Tip: Click here to run a free scan for Windows Errors and optimize PC performance

From: Opa (anonymous_at_discussions.microsoft.com)
Date: 06/06/04


Date: Sun, 6 Jun 2004 08:26:01 -0700

Hi,

I'm having problem serialization an object instance which contains a public property on the object type.
My object hierarchy is many levels deep, so for simplicty I created to following which produces the same error:

Let's say there is a class called ParkingSpot with a public member Vehicle having an object type of object.
For simplicity, let's say that Vehicle could be anything, hence I create a new object of Car type
and assign it to the Vehicle property of the ParkingSpot object.

When I try to serialize the ParkingSpot class, I get an error with an inner exception stating:
 _innerException: {"The type SerializationTest.Car was not expected. Use the XmlInclude or SoapInclude attribute to specify types that are not known statically." }
  
My classes are the following:

using System;
using System.Runtime.Serialization;
using System.Xml.Serialization;

        public class ParkingSpot : ISerializable
        {
                private object _vehicle;
                public ParkingSpot(){}
                
                [XmlElement("Vehicle")]
                public object Vehicle
                {
                        get
                        {
                                return _vehicle;
                        }
                        set
                        {
                                _vehicle = value;
                        }
                }
                #region ISerializable Members
                public void GetObjectData(SerializationInfo info, StreamingContext context)
                {
                        // TODO: Add ParkingSpot.GetObjectData implementation
                }
                #endregion
        }

        public class Car
        {
                public string Make;
                public string Model;
                public Car(){}
        
        }

 I have a button on a form with the following serialization code:

        private void btnSerialize_Click(object sender, System.EventArgs e)
        {
                ParkingSpot parkingSpot = new ParkingSpot();
                Car car = new Car();
                car.Make = "Nissan";
                car.Model = "Maxima";
                parkingSpot.Vehicle = car;
                        
                try
                {
                // Serialization
                        XmlSerializer s = new XmlSerializer(typeof(ParkingSpot));
                        TextWriter w = new StreamWriter(@"C:\ParkingSpot.xml");
                        s.Serialize(w, parkingSpot);
                        w.Close();
                }
                catch (Exception exp)
                {
                        Console.WriteLine ("{0}",exp.Message);
                }
        }

Does anyone know what the problem is?
I tried changing the [XmlElement] attribute to [XmlAnyElement] attribute, but this causes another error.

Please help, I've been stumped on this one for over a day.

Thanks a lot.


Quantcast