Problem with serializing multiple collections with a base class

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Gonzo

    #1

    Problem with serializing multiple collections with a base class

    I have the following code. When I serialize the DriverCollectio n I would
    like to get both the Driver Collection and the DeletedItems collection. I
    end up with only the Driver collection. I have tried numerous attributes
    with no success. Any help would be appreciated...


    using System;
    using System.IO;
    using System.Text;
    using System.Xml;
    using System.Xml.Seri alization;
    using System.Runtime. Serialization;
    using System.Runtime. Serialization.F ormatters.Binar y;
    using System.Collecti ons;

    namespace SerialTest
    {
    #region BusinessObjectB ase
    /// Summary description for BusinessObjectB ase.
    /// </summary>
    [Serializable()]
    public abstract class BusinessObjectB ase
    {
    public BusinessObjectB ase()
    {}
    }
    #endregion //BusinessObjectB ase

    #region BusinessObjectC ollectionBase
    /// <summary>
    /// Summary description for BusinessObjectC ollectionBase.
    /// </summary>
    [Serializable()]
    public class BusinessObjectC ollectionBase : CollectionBase
    {
    public DeletedItemColl ection _deletedItems = new DeletedItemColl ection();

    public BusinessObjectC ollectionBase()
    {}

    public DeletedItemColl ection DeletedItems
    {
    get{return _deletedItems;}
    set{_deletedIte ms = value;}
    }
    }
    #endregion //BusinessObjectC ollectionBase

    #region DeletedItemColl ection
    /// <summary>
    /// Summary description for BusinessObjectC ollectionBase.
    /// </summary>
    [Serializable()]
    public class DeletedItemColl ection : CollectionBase
    {
    #region Constructors

    public DeletedItemColl ection()
    {}

    #endregion

    public BusinessObjectB ase this[int index]
    {
    get{return (BusinessObject Base)List[index];}
    set{List[index] = value;}
    }

    public int Add(BusinessObj ectBase value)
    {
    return List.Add(value) ;
    }

    }
    #endregion //DeletedItemColl ection

    #region DriverCollectio n
    /// <summary>
    /// Summary description for DriverCollectio n.
    /// </summary>
    [Serializable()]
    public class DriverCollectio n : BusinessObjectC ollectionBase
    {
    #region Constructors

    public DriverCollectio n()
    {}

    #endregion

    #region IListMethods

    public Driver this[int index]
    {
    get{return (Driver)List[index];}
    set{List[index] = value;}
    }

    public int Add(Driver value)
    {
    return List.Add(value) ;
    }

    public bool Contains(Driver value)
    {
    return List.Contains(v alue);
    }

    public bool Contains(int driverNumber)
    {
    Driver d = GetDriver(drive rNumber);
    return d == null ? false : Contains(d);
    }

    public bool ContainsDeleted (int driverNumber)
    {
    foreach(Busines sObjectBase bob in _deletedItems)
    {
    Driver d = (Driver)bob;
    if(d.Number == driverNumber)
    return true;
    }

    return false;
    }

    public int IndexOf(Driver value)
    {
    return List.IndexOf(va lue);
    }

    public int IndexOf(int driverNumber)
    {
    Driver d = GetDriver(drive rNumber);
    return d == null ? -1 : IndexOf(d);
    }

    public void Remove(Driver value)
    {
    List.Remove(val ue);
    }

    public Driver GetDriver(int driverNumber)
    {
    for(int i = 0; i < this.Count; i++)
    if(this[i].Number == driverNumber)
    return this[i];

    return null;
    }

    public void DeleteDriver(in t driverNumber)
    {
    Driver d = GetDriver(drive rNumber);
    Remove(d);
    _deletedItems.A dd(d);
    }

    #endregion
    }
    #endregion //DriverCollectio n

    #region Driver
    /// <summary>
    /// Summary description for Driver.
    /// </summary>
    [Serializable()]
    public class Driver : BusinessObjectB ase
    {
    #region Constructors

    public Driver()
    {
    }

    #endregion


    #region Number

    int _number = 0;
    public int Number
    {
    get{return _number;}
    set
    {
    if(value != _number)
    {
    _number = value;
    }
    }
    }

    #endregion

    }
    #endregion //Driver

    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    class Tester
    {
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
    DriverCollectio n drivers = new DriverCollectio n();
    Driver driver1 = new Driver();
    Driver driver2 = new Driver();
    Driver driver3 = new Driver();
    Driver driver4 = new Driver();
    driver1.Number = 1;
    drivers.Add(dri ver1);
    driver2.Number = 2;
    drivers.Add(dri ver2);
    driver3.Number = 3;
    drivers.Add(dri ver3);
    driver4.Number = 4;
    drivers.Add(dri ver4);

    drivers.DeleteD river(2);
    drivers.DeleteD river(3);

    //*************** *************
    // XML serialization
    //*************** *************
    // Creat a Serializer
    try
    {

    XmlSerializer serializer = new XmlSerializer(t ypeof(DriverCol lection));

    // Create an XmlTextWriter using a FileStream.
    Stream fs = new FileStream(@"C: \NewPolicy.xml" , FileMode.Create );
    XmlWriter writer =
    new XmlTextWriter(f s, Encoding.Unicod e);

    // Serialize using the XmlTextWriter.
    serializer.Seri alize(writer, drivers);
    writer.Close();
    }
    catch (System.Excepti on e)
    {
    throw e;
    //Handle exception here
    }
    }
    }
    }

    --
    Gonzo
Working...