Exemplo n.º 1
0
            /// <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);
                }
            }
Exemplo n.º 2
0
            /// <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);
            }