PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : c# xmlSerialize


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?

Gast
2007-03-01, 22:37:12
is nur geraten
wenn die datei leer is hängts mit dem zustand der datei beim schreiben zusammen bzw. wie das geschrieben/geöffnet wird?
klingt ja irgendwie nahe liegend. debug halt mal und nehms einfach schrittweise auseinander oder evtl. manual lesen dann kommst du schon drauf.