Gast
2007-03-01, 20:43:57
Hi ,
ich habe ein Programm was sich komisch verhält.
Beim ersten seralizen von einer Klasse wird alles richtig rausgeschrieben, aber
wenn ich in meinem Programm einen neuen User anlegen und die Daten neu
rauschrieben will, ist die Datei leer, obwohl der Array die richtigen Daten enthält. Eine weitere Merkwürdigkeit ist , wenn ich direkt
nach dem Programm start die Datei nochmal schreiben lasse
ist die Datei noch in Ordnung, aber wenn ich einen User anlege
nicht mehr, obwohl er richtig in eine Arraylist geschrieben wird, die nacher zu einem Array wird.
public void SerializeObject(User [] val)
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(User [] ));
for (int i = 0; i < val.Length; i++)
{
Console.WriteLine(val[i].Surname);
}
TextWriter textWriter = new StreamWriter("db2.xml");
xmlSerializer.Serialize(textWriter, val);
textWriter.Close();
}
public void createUser()
{
String temp = "";
User user = null;
Console.WriteLine("New user data: ");
Console.Write("- User type (1 Employee, 2 Student): ");
temp = Console.ReadLine();
switch (temp)
{
case "1":
user = new Employee();
break;
case "2":
user = new Student();
break;
default: return;
}
Console.Write("- Forename: ");
temp = Console.ReadLine();
user.Forename = temp;
Console.Write("- Surname: ");
temp = Console.ReadLine();
user.Surname = temp;
Console.Write("- Phone: ");
temp = Console.ReadLine();
user.Phone = temp;
if (user is Employee)
{
Console.Write("- Work phone: ");
temp = Console.ReadLine();
((Employee)user).WorkPhoneNo = temp;
}
Console.Write("- Email: ");
temp = Console.ReadLine();
user.Email = temp;
Console.Write("- Birthday: ");
temp = Console.ReadLine();
user.Birthday = temp;
if (user is Student)
{
Console.Write("- Start of study: " + ((Student)user).StartOfStudy);
temp = Console.ReadLine();
((Student)user).StartOfStudy = Convert.ToInt32(temp);
Console.Write("- Study phase (phd, master, bachelor): ");
temp = Console.ReadLine();
switch (temp.ToLower())
{
case "phd": ((Student)user).StudyPhase = Student.Phase.PHD; break;
case "master": ((Student)user).StudyPhase = Student.Phase.Master; break;
case "bachelor": ((Student)user).StudyPhase = Student.Phase.Bachelor; break;
}
}
addUserEvent(user);
}
public void write()
{
User[] tmpUser = new User[this.users.Count];
//this.users.CopyTo(tmpUser);
for (int i = 0; i < users.Count; i++)
{
tmpUser[i] = (User)users[i];
}
Console.WriteLine("ArrayLength" + this.users.Count);
Console.WriteLine("Write");
fileHandler.SerializeObject(tmpUser);
}
Woran kann das liegen?
ich habe ein Programm was sich komisch verhält.
Beim ersten seralizen von einer Klasse wird alles richtig rausgeschrieben, aber
wenn ich in meinem Programm einen neuen User anlegen und die Daten neu
rauschrieben will, ist die Datei leer, obwohl der Array die richtigen Daten enthält. Eine weitere Merkwürdigkeit ist , wenn ich direkt
nach dem Programm start die Datei nochmal schreiben lasse
ist die Datei noch in Ordnung, aber wenn ich einen User anlege
nicht mehr, obwohl er richtig in eine Arraylist geschrieben wird, die nacher zu einem Array wird.
public void SerializeObject(User [] val)
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(User [] ));
for (int i = 0; i < val.Length; i++)
{
Console.WriteLine(val[i].Surname);
}
TextWriter textWriter = new StreamWriter("db2.xml");
xmlSerializer.Serialize(textWriter, val);
textWriter.Close();
}
public void createUser()
{
String temp = "";
User user = null;
Console.WriteLine("New user data: ");
Console.Write("- User type (1 Employee, 2 Student): ");
temp = Console.ReadLine();
switch (temp)
{
case "1":
user = new Employee();
break;
case "2":
user = new Student();
break;
default: return;
}
Console.Write("- Forename: ");
temp = Console.ReadLine();
user.Forename = temp;
Console.Write("- Surname: ");
temp = Console.ReadLine();
user.Surname = temp;
Console.Write("- Phone: ");
temp = Console.ReadLine();
user.Phone = temp;
if (user is Employee)
{
Console.Write("- Work phone: ");
temp = Console.ReadLine();
((Employee)user).WorkPhoneNo = temp;
}
Console.Write("- Email: ");
temp = Console.ReadLine();
user.Email = temp;
Console.Write("- Birthday: ");
temp = Console.ReadLine();
user.Birthday = temp;
if (user is Student)
{
Console.Write("- Start of study: " + ((Student)user).StartOfStudy);
temp = Console.ReadLine();
((Student)user).StartOfStudy = Convert.ToInt32(temp);
Console.Write("- Study phase (phd, master, bachelor): ");
temp = Console.ReadLine();
switch (temp.ToLower())
{
case "phd": ((Student)user).StudyPhase = Student.Phase.PHD; break;
case "master": ((Student)user).StudyPhase = Student.Phase.Master; break;
case "bachelor": ((Student)user).StudyPhase = Student.Phase.Bachelor; break;
}
}
addUserEvent(user);
}
public void write()
{
User[] tmpUser = new User[this.users.Count];
//this.users.CopyTo(tmpUser);
for (int i = 0; i < users.Count; i++)
{
tmpUser[i] = (User)users[i];
}
Console.WriteLine("ArrayLength" + this.users.Count);
Console.WriteLine("Write");
fileHandler.SerializeObject(tmpUser);
}
Woran kann das liegen?