Hallo erstmal,
ich habe ein Problem mit dem Serialisieren. Und zwar programmiere ich gerade ein Quiz für die Schule.
Ich habe folgende Klassen die für mein Problem nötig sind zu erwähnen:
QuizKatalog
--
ObservableCollection<FragenKatalog>
----
ObservableCollection<Frage>
----
String QuizName
Übrigens, ich programmiere in .Net 4.5.1.! Es gab nur 4.5 zum auswählen für dieses Thread!
Im folgenden Code, sieht man die Klasse "Fragebogen":
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:
| using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace SchoolQuizer.Klassen.Quiz.FragenTypen { [Serializable] public class FragenKatalog : ObservableCollection<Frage> { public FragenKatalog() : base() {
}
private String quizName; public String QuizName { get { return this.quizName; } set { this.quizName = value; } }
} } |
Mein Problem ist nun, dass der Inhalt in der ObservableCollection zwar serialisiert wird, aber die Eigenschaft "QuizName" nicht.
Der nächste Code ist die Klasse Frage:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215:
| using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml.Serialization;
namespace SchoolQuizer.Klassen.Quiz.FragenTypen { [Serializable] public class Frage : Evil.Logix.BindableBase { public enum RightAnswerPossibilities { Antwort1, Antwort2, Antwort3, Antwort4 };
public enum QuestionTypes { MultipleChoice };
public Frage() : base() {
}
private QuestionTypes questionType; public QuestionTypes QuestionType { get { return this.questionType; } set { this.SetProperty ( ref this.questionType, value ); } }
private String question; public String Question { get { return this.question; } set { this.SetProperty ( ref this.question, value ); } }
private String antwort1; public String Antwort1 { get { return this.antwort1; } set { this.SetProperty ( ref this.antwort1, value ); } }
private String antwort2; public String Antwort2 { get { return this.antwort2; } set { this.SetProperty ( ref this.antwort2, value ); } }
private String antwort3; public String Antwort3 { get { return this.antwort3; } set { this.SetProperty ( ref this.antwort3, value ); } }
private String antwort4; public String Antwort4 { get { return this.antwort4; } set { this.SetProperty ( ref this.antwort4, value ); } }
private RightAnswerPossibilities rightAnswer; public RightAnswerPossibilities RightAnswer { get { return this.rightAnswer; } set { this.SetProperty ( ref this.rightAnswer, value ); } }
private String pathToPicture; public String PathToPicture { get { return this.pathToPicture; } set { this.SetProperty ( ref this.pathToPicture, value ); } }
public Boolean IsAnswer1 { get { if ( rightAnswer == RightAnswerPossibilities.Antwort1 ) return true;
return false; } set { if ( (Boolean) value == true ) { this.IsAnswer2 = false; this.IsAnswer3 = false; this.IsAnswer4 = false;
this.SetProperty ( ref this.rightAnswer, RightAnswerPossibilities.Antwort1 ); } } }
public Boolean IsAnswer2 { get { if ( rightAnswer == RightAnswerPossibilities.Antwort2 ) return true;
return false; } set { if ( (Boolean) value == true ) { this.IsAnswer1 = false; this.IsAnswer3 = false; this.IsAnswer4 = false;
this.SetProperty ( ref this.rightAnswer, RightAnswerPossibilities.Antwort2 ); } } }
public Boolean IsAnswer3 { get { if ( rightAnswer == RightAnswerPossibilities.Antwort3 ) return true;
return false; } set { if ( (Boolean) value == true ) { this.IsAnswer1 = false; this.IsAnswer2 = false; this.IsAnswer4 = false;
this.SetProperty ( ref this.rightAnswer, RightAnswerPossibilities.Antwort3 ); } } }
public Boolean IsAnswer4 { get { if ( rightAnswer == RightAnswerPossibilities.Antwort4 ) return true;
return false; } set { if ( (Boolean) value == true ) { this.IsAnswer1 = false; this.IsAnswer2 = false; this.IsAnswer3 = false;
this.SetProperty ( ref this.rightAnswer, RightAnswerPossibilities.Antwort4 ); } } }
} } |
Und der Code ist der QuizKatalog:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| using SchoolQuizer.Klassen.Quiz.FragenTypen; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks;
namespace SchoolQuizer.Klassen.Quiz { [Serializable] public class QuizKatalog : ObservableCollection<FragenKatalog> { public QuizKatalog() : base() {
}
public void Save(String path, Boolean overwriteAccess = false) { Evil.FileManager.SerializeObject<QuizKatalog> ( path, this, overwriteAccess ); }
public static QuizKatalog Load(String path, Boolean checkForNull) { var toReturn = Evil.FileManager.DeserializeObject<QuizKatalog> ( path );
if ( toReturn == null && checkForNull == true ) return new QuizKatalog (); return toReturn; } } } |
Ich bitte euch nix verändern zu wollen oder mir auf zu zwengen, außer sie sind nötig. Und wenn, dann bitte mit Erklärung.
Der letzte Code ist die Methode zum serialiseren der Klasse:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| public static void SerializeObject<MyObjectInstanz> ( String path, MyObjectInstanz obj, Boolean overwrite = false ) { if(overwrite == true) { try { FileManager.DeleteFile ( path, true ); } catch (Exception e) { Console.WriteLine ( e.Message ); } }
using ( FileStream stream = new FileStream ( path, FileMode.Create, FileAccess.Write ) ) { try { XmlSerializer s = new XmlSerializer ( typeof ( MyObjectInstanz ) ); s.Serialize ( stream, obj ); } catch ( Exception e ) { Console.WriteLine ( e.Message ); } } } |
Wenn ihr noch mehr Code braucht, schreibts mir!
Danke im voraus!
lg
Dr. Prof. Evil