/// <summary> /// Parses the media entity. /// </summary> /// <param name="reader">The reader.</param> /// <returns></returns> public TwitterMediaEntity parseMediaEntity(JsonReader reader) { try { if (reader.TokenType != JsonToken.StartObject) { return(null); } TwitterMediaEntity entity = new TwitterMediaEntity(); int startDepth = reader.Depth; // Start looping through all of the child nodes while (reader.Read() && reader.Depth >= startDepth) { // If the current node isn't a property, skip it if (reader.TokenType != JsonToken.PropertyName) { continue; } string fieldName = reader.Value as string; if (string.IsNullOrEmpty(fieldName)) { continue; } switch (fieldName) { case "type": entity.MediaType = string.IsNullOrEmpty((string)reader.Value) ? TwitterMediaEntity.MediaTypes.Unknown : TwitterMediaEntity.MediaTypes.Photo; break; case "sizes": entity.Sizes = new List <TwitterMediaEntity.MediaSize>(); break; case "large": case "medium": case "small": case "thumb": if (reader.TokenType != JsonToken.PropertyName) { break; } TwitterMediaEntity.MediaSize newSize = new TwitterMediaEntity.MediaSize(); switch ((string)reader.Value) { case "large": newSize.Size = TwitterMediaEntity.MediaSize.MediaSizes.Large; break; case "medium": newSize.Size = TwitterMediaEntity.MediaSize.MediaSizes.Medium; break; case "small": newSize.Size = TwitterMediaEntity.MediaSize.MediaSizes.Small; break; case "thumb": newSize.Size = TwitterMediaEntity.MediaSize.MediaSizes.Thumb; break; default: break; } int sizeDepth = reader.Depth; // Loop through all of the properties of the size and read their values while (reader.Read() && sizeDepth < reader.Depth) { if (reader.TokenType != JsonToken.PropertyName) { continue; } ReadFieldValue(reader, "h", newSize, () => newSize.Height); ReadFieldValue(reader, "w", newSize, () => newSize.Width); if (reader.TokenType == JsonToken.PropertyName && (string)reader.Value == "resize") { reader.Read(); newSize.Resize = string.IsNullOrEmpty((string)reader.Value) ? TwitterMediaEntity.MediaSize.MediaSizeResizes.Unknown : ((string)reader.Value == "fit" ? TwitterMediaEntity.MediaSize.MediaSizeResizes.Fit : TwitterMediaEntity.MediaSize.MediaSizeResizes.Crop); } } entity.Sizes.Add(newSize); break; case "indices": reader.Read(); reader.Read(); entity.StartIndex = Convert.ToInt32((long)reader.Value); reader.Read(); entity.EndIndex = Convert.ToInt32((long)reader.Value); break; default: break; } ReadFieldValue(reader, "id", entity, () => entity.Id); ReadFieldValue(reader, "id_str", entity, () => entity.IdString); ReadFieldValue(reader, "media_url", entity, () => entity.MediaUrl); ReadFieldValue(reader, "media_url_https", entity, () => entity.MediaUrlSecure); ReadFieldValue(reader, "url", entity, () => entity.Url); ReadFieldValue(reader, "display_url", entity, () => entity.DisplayUrl); ReadFieldValue(reader, "expanded_url", entity, () => entity.ExpandedUrl); } return(entity); } catch { return(null); } }
/// <summary> /// Writes the media entity. /// </summary> /// <param name="w">The w.</param> /// <param name="e">The e.</param> private static void WriteMediaEntity(JsonWriter w, TwitterMediaEntity e) { w.WritePropertyName("type"); switch (e.MediaType) { case TwitterMediaEntity.MediaTypes.Unknown: w.WriteNull(); break; case TwitterMediaEntity.MediaTypes.Photo: w.WriteValue("photo"); break; default: break; } w.WritePropertyName("sizes"); w.WriteStartObject(); { foreach (var item in e.Sizes) { w.WritePropertyName(item.Size.ToString().ToLower()); w.WriteStartObject(); { w.WritePropertyName("h"); w.WriteValue(item.Height); w.WritePropertyName("w"); w.WriteValue(item.Width); w.WritePropertyName("resize"); w.WriteValue(item.Resize == TwitterMediaEntity.MediaSize.MediaSizeResizes.Fit ? "fit" : "crop"); w.WriteEndObject(); } } w.WriteEndObject(); } w.WritePropertyName("id"); w.WriteValue(e.Id); w.WritePropertyName("id_str"); w.WriteValue(e.IdString); w.WritePropertyName("media_url"); w.WriteValue(e.MediaUrl); w.WritePropertyName("media_url_https"); w.WriteValue(e.MediaUrlSecure); w.WritePropertyName("url"); w.WriteValue(e.Url); w.WritePropertyName("display_url"); w.WriteValue(e.DisplayUrl); w.WritePropertyName("expanded_url"); w.WriteValue(e.ExpandedUrl); }