public static IPlayerData CreateFromData(JToken player) { ESPNPlayerData stats = new ESPNPlayerData(); stats.DisplayName = (string)player["player"]["fullName"]; stats.SourceID = (string)player["player"]["id"]; stats.Outlook = (string)player["player"]["seasonOutlook"]; HashSet <Position> allPositions = new HashSet <Position>(); List <int> espnPositions = new List <int>(((JArray)player["player"]["eligibleSlots"]).Select(s => (int)s).ToArray()); foreach (int espnPosition in espnPositions) { List <Position> positions; if (PositionMapping.TryGetValue(espnPosition, out positions)) { foreach (Position position in positions) { allPositions.Add(position); } } } stats.Positions = allPositions.ToList(); Dictionary <string, string> espnStats = new Dictionary <string, string>(); JToken statsRoot = player["player"]["stats"]; if (statsRoot != null && statsRoot.Count() > 0) { bool foundStats = false; foreach (JToken statSet in player["player"]["stats"].Children()) { foreach (string espnStat in ESPNConstants.Stats.Batters.All.Union(ESPNConstants.Stats.Pitchers.All)) { string statValueStr = (string)statSet["stats"][espnStat]; if (!string.IsNullOrEmpty(statValueStr)) { espnStats[espnStat] = statValueStr; foundStats = true; } } if (foundStats) { break; } } } ESPNConstants.Stats.MapESPNStatDictionaryToDataModelStatDictionary(espnStats, stats.Stats); return(stats); }