//deserialize speaker database file... public static SpeakerCollection Deserialize(string filename) { var mysp = new SpeakerCollection(); Deserialize(filename, mysp); return mysp; }
/// <summary> /// copy constructor /// </summary> /// <param name="aSpeakers"></param> public SpeakerCollection(SpeakerCollection aSpeakers) { if (aSpeakers != null) { this._fileName = aSpeakers._fileName; if (aSpeakers._Speakers != null) { this._Speakers = new List<Speaker>(); for (int i = 0; i < aSpeakers._Speakers.Count; i++) { this._Speakers.Add(aSpeakers._Speakers[i].Copy()); } } } }
public SpeakerCollection(string filename) { SpeakerCollection.Deserialize(filename, this); }
/// <summary> /// //deserialize speaker database file. /// Old file format support should not concern anyone outside ite.tul.cz, public release never containded old format /// </summary> /// <param name="filename"></param> /// <param name="store"></param> public static void Deserialize(string filename, SpeakerCollection store) { //if file do not exists, do not modify store if (!File.Exists(filename)) { return; } store._fileName = filename; XDocument doc = XDocument.Load(filename); if (doc.Root.Name == "MySpeakers") //old format from XmlSerializer { #region old format var root = doc.Root; var speakers = root.Elements("Speakers").Elements("Speaker"); foreach (var sp in speakers) { Speaker speaker = new Speaker(); var id = sp.Element("ID"); var fname = sp.Element("FirstName"); var sname = sp.Element("Surname"); var sex = sp.Element("Sex"); var comment = sp.Element("Comment"); var lang = sp.Element("DefaultLang"); if (id != null) speaker.SerializationID = XmlConvert.ToInt32(id.Value); else continue; speaker.DBID = Guid.NewGuid().ToString(); speaker.FirstName = fname.Value ?? ""; speaker.Surname = sname.Value ?? ""; switch (sex.Value.ToLower()) { case "m": case "muž": case "male": speaker.Sex = Speaker.Sexes.Male; break; case "f": case "žena": case "female": speaker.Sex = Speaker.Sexes.Female; break; default: speaker.Sex = Speaker.Sexes.X; break; } if (comment != null && !string.IsNullOrWhiteSpace(comment.Value)) speaker.Attributes.Add(new SpeakerAttribute("comment", "comment", comment.Value)); int vvvv; if (int.TryParse(lang.Value, out vvvv) && vvvv < Speaker.Langs.Count) { speaker.DefaultLang = Speaker.Langs[vvvv]; }else { speaker.DefaultLang = lang.Value ?? Speaker.Langs[0]; } store.Add(speaker); } #endregion } else { store._Speakers = doc.Root.Elements("s").Select(x => new Speaker(x)).ToList(); store.Initialize(doc); } }