/// <summary> /// V2 deserialization beware of local variable names /// </summary> /// <param name="e"></param> /// <param name="isStrict"></param> /// <returns></returns> public static TranscriptionParagraph DeserializeV2(XElement e, bool isStrict) { TranscriptionParagraph par = new TranscriptionParagraph(); par._internalID = int.Parse(e.Attribute(isStrict ? "speakerid" : "s").Value); par.AttributeString = (e.Attribute(isStrict ? "attributes" : "a") ?? EmptyAttribute).Value; par.Elements = e.Attributes().ToDictionary(a => a.Name.ToString(), a => a.Value); par.Elements.Remove(isStrict ? "begin" : "b"); par.Elements.Remove(isStrict ? "end" : "e"); par.Elements.Remove(isStrict ? "attributes" : "a"); par.Elements.Remove(isStrict ? "speakerid" : "s"); e.Elements(isStrict ? "phrase" : "p").Select(p => (TranscriptionElement)TranscriptionPhrase.DeserializeV2(p, isStrict)).ToList().ForEach(p => par.Add(p));; if (e.Attribute(isStrict ? "attributes" : "a") != null) { par.AttributeString = e.Attribute(isStrict ? "attributes" : "a").Value; } if (e.Attribute(isStrict ? "begin" : "b") != null) { string val = e.Attribute(isStrict ? "begin" : "b").Value; int ms; if (int.TryParse(val, out ms)) { par.Begin = TimeSpan.FromMilliseconds(ms); } else { par.Begin = XmlConvert.ToTimeSpan(val); } } else { var ch = par._children.FirstOrDefault(); par.Begin = ch == null ? TimeSpan.Zero : ch.Begin; } if (e.Attribute(isStrict ? "end" : "e") != null) { string val = e.Attribute(isStrict ? "end" : "e").Value; int ms; if (int.TryParse(val, out ms)) { par.End = TimeSpan.FromMilliseconds(ms); } else { par.End = XmlConvert.ToTimeSpan(val); } } else { var ch = par._children.LastOrDefault(); par.End = ch == null ? TimeSpan.Zero : ch.Begin; } return(par); }