internal override void Parse(XElement element) { Id = element.ElementAsLong("id"); var bestBookElement = element.Element("best_book"); if (bestBookElement != null) { BestBook = new BestBook(); BestBook.Parse(bestBookElement); } BestBookId = element.ElementAsNullableLong("best_book_id"); BooksCount = element.ElementAsInt("books_count"); ReviewsCount = element.ElementAsInt("reviews_count"); RatingsSum = element.ElementAsInt("ratings_sum"); RatingsCount = element.ElementAsInt("ratings_count"); TextReviewsCount = element.ElementAsInt("text_reviews_count"); // Merge the Goodreads publication fields into one date property var originalPublicationYear = element.ElementAsInt("original_publication_year"); var originalPublicationMonth = element.ElementAsInt("original_publication_month"); var originalPublicationDay = element.ElementAsInt("original_publication_day"); if (originalPublicationYear != 0 && originalPublicationMonth != 0 && originalPublicationDay != 0) { OriginalPublicationDate = new DateTime(originalPublicationYear, originalPublicationMonth, originalPublicationDay); } OriginalTitle = element.ElementAsString("original_title"); OriginalLanguageId = element.ElementAsNullableInt("original_language_id"); MediaType = element.ElementAsString("media_type"); // Parse out the rating distribution var ratingDistributionElement = element.ElementAsString("rating_dist"); if (ratingDistributionElement != null) { var parts = ratingDistributionElement.Split('|'); if (parts != null && parts.Length > 0) { var ratingDistribution = new Dictionary <int, int>(); var ratings = parts.Select(x => x.Split(':')) .Where(x => x[0] != "total") .OrderBy(x => x[0]); foreach (var rating in ratings) { int star = 0, count = 0; int.TryParse(rating[0], out star); int.TryParse(rating[1], out count); ratingDistribution.Add(star, count); } RatingDistribution = ratingDistribution; } } }
internal override void Parse(XElement element) { Id = element.ElementAsInt("id"); var bestBookElement = element.Element("best_book"); if (bestBookElement != null) { BestBook = new BestBook(); BestBook.Parse(bestBookElement); } BestBookId = element.ElementAsNullableInt("best_book_id"); BooksCount = element.ElementAsInt("books_count"); ReviewsCount = element.ElementAsInt("reviews_count"); RatingsSum = element.ElementAsInt("ratings_sum"); RatingsCount = element.ElementAsInt("ratings_count"); TextReviewsCount = element.ElementAsInt("text_reviews_count"); // Merge the Goodreads publication fields into one date property var originalPublicationYear = element.ElementAsInt("original_publication_year"); var originalPublicationMonth = element.ElementAsInt("original_publication_month"); var originalPublicationDay = element.ElementAsInt("original_publication_day"); if (originalPublicationYear != 0 && originalPublicationMonth != 0 && originalPublicationDay != 0) { OriginalPublicationDate = new DateTime(originalPublicationYear, originalPublicationMonth, originalPublicationDay); } OriginalTitle = element.ElementAsString("original_title"); OriginalLanguageId = element.ElementAsNullableInt("original_language_id"); MediaType = element.ElementAsString("media_type"); // Parse out the rating distribution var ratingDistributionElement = element.ElementAsString("rating_dist"); if (ratingDistributionElement != null) { var parts = ratingDistributionElement.Split('|'); if (parts != null && parts.Length > 0) { var ratingDistribution = new Dictionary<int, int>(); var ratings = parts.Select(x => x.Split(':')) .Where(x => x[0] != "total") .OrderBy(x => x[0]); foreach (var rating in ratings) { int star = 0, count = 0; int.TryParse(rating[0], out star); int.TryParse(rating[1], out count); ratingDistribution.Add(star, count); } RatingDistribution = ratingDistribution; } } }