I have the following code. When I serialize the DriverCollection 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.Serialization;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Collections;
namespace SerialTest
{
#region BusinessObjectBase
/// Summary description for BusinessObjectBase.
/// </summary>
[Serializable()]
public abstract class BusinessObjectBase
{
public BusinessObjectBase()
{}
}
#endregion //BusinessObjectBase
#region BusinessObjectCollectionBase
/// <summary>
/// Summary description for BusinessObjectCollectionBase.
/// </summary>
[Serializable()]
public class BusinessObjectCollectionBase : CollectionBase
{
public DeletedItemCollection _deletedItems = new DeletedItemCollection();
public BusinessObjectCollectionBase()
{}
public DeletedItemCollection DeletedItems
{
get{return _deletedItems;}
set{_deletedItems = value;}
}
}
#endregion //BusinessObjectCollectionBase
#region DeletedItemCollection
/// <summary>
/// Summary description for BusinessObjectCollectionBase.
/// </summary>
[Serializable()]
public class DeletedItemCollection : CollectionBase
{
#region Constructors
public DeletedItemCollection()
{}
#endregion
public BusinessObjectBase this[int index]
{
get{return (BusinessObjectBase)List[index];}
set{List[index] = value;}
}
public int Add(BusinessObjectBase value)
{
return List.Add(value);
}
}
#endregion //DeletedItemCollection
#region DriverCollection
/// <summary>
/// Summary description for DriverCollection.
/// </summary>
[Serializable()]
public class DriverCollection : BusinessObjectCollectionBase
{
#region Constructors
public DriverCollection()
{}
#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(value);
}
public bool Contains(int driverNumber)
{
Driver d = GetDriver(driverNumber);
return d == null ? false : Contains(d);
}
public bool ContainsDeleted(int driverNumber)
{
foreach(BusinessObjectBase bob in _deletedItems)
{
Driver d = (Driver)bob;
if(d.Number == driverNumber)
return true;
}
return false;
}
public int IndexOf(Driver value)
{
return List.IndexOf(value);
}
public int IndexOf(int driverNumber)
{
Driver d = GetDriver(driverNumber);
return d == null ? -1 : IndexOf(d);
}
public void Remove(Driver value)
{
List.Remove(value);
}
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(int driverNumber)
{
Driver d = GetDriver(driverNumber);
Remove(d);
_deletedItems.Add(d);
}
#endregion
}
#endregion //DriverCollection
#region Driver
/// <summary>
/// Summary description for Driver.
/// </summary>
[Serializable()]
public class Driver : BusinessObjectBase
{
#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)
{
DriverCollection drivers = new DriverCollection();
Driver driver1 = new Driver();
Driver driver2 = new Driver();
Driver driver3 = new Driver();
Driver driver4 = new Driver();
driver1.Number = 1;
drivers.Add(driver1);
driver2.Number = 2;
drivers.Add(driver2);
driver3.Number = 3;
drivers.Add(driver3);
driver4.Number = 4;
drivers.Add(driver4);
drivers.DeleteDriver(2);
drivers.DeleteDriver(3);
//****************************
// XML serialization
//****************************
// Creat a Serializer
try
{
XmlSerializer serializer = new XmlSerializer(typeof(DriverCollection));
// Create an XmlTextWriter using a FileStream.
Stream fs = new FileStream(@"C:\NewPolicy.xml", FileMode.Create);
XmlWriter writer =
new XmlTextWriter(fs, Encoding.Unicode);
// Serialize using the XmlTextWriter.
serializer.Serialize(writer, drivers);
writer.Close();
}
catch (System.Exception e)
{
throw e;
//Handle exception here
}
}
}
}
--
Gonzo