public static Activity Parse(XElement element) { if (element.Name.LocalName != "Activity") { return(null); } var activity = new Activity(); var sportValue = element.Attributes().Where(d => d.Name.LocalName == "Sport").Select(a => a.Value).FirstOrDefault(); activity.Sport = sportValue; var creatorElement = element.Descendants().Where(d => d.Name.LocalName == "Creator").FirstOrDefault(); if (creatorElement != null) { var nameValue = creatorElement.Descendants().Where(d => d.Name.LocalName == "Name").Select(a => a.Value).FirstOrDefault(); var idValue = creatorElement.Descendants().Where(d => d.Name.LocalName == "UnitId").Select(a => a.Value).FirstOrDefault(); activity.Creator = $"{nameValue} {idValue}"; } var lapElements = element.Descendants().Where(d => d.Name.LocalName == "Lap").ToList(); var laps = lapElements.Select(e => Lap.Parse(e)).Where(t => t != null).ToList(); activity.Laps = laps.ToArray(); return(activity); }