//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);
            }
        }