/// <summary>
        /// Serializes the specified serializer.
        /// </summary>
        /// <param name="serializer">The serializer.</param>
        /// <returns>
        /// A serialized <see cref="IDictionary{String,Object}" />.
        /// </returns>
        public IDictionary <string, object> Serialize(JavaScriptSerializer serializer)
        {
            IDictionary <string, object> serialized = new Dictionary <string, object>();

            serialized["customFields"]     = CustomFields;
            serialized["economics"]        = Economics.ToBrightcoveName();
            serialized["itemState"]        = ItemState.ToBrightcoveName();
            serialized["linkURL"]          = LinkUrl;
            serialized["linkText"]         = LinkText;
            serialized["longDescription"]  = LongDescription;
            serialized["name"]             = Name;
            serialized["referenceId"]      = ReferenceId;
            serialized["shortDescription"] = ShortDescription;
            serialized["tags"]             = Tags;

            // if the date is MinValue, that means it hasn't been set, so don't include it
            if (StartDate > DateTime.MinValue)
            {
                serialized["startDate"] = StartDate.ToUnixMillisecondsUtc();
            }
            if (EndDate > DateTime.MinValue)
            {
                serialized["endDate"] = EndDate.ToUnixMillisecondsUtc();
            }

            // When creating or updating a video, only one of either VideoFullLength and Renditions may
            // be set. If both are set, we get the following error:
            // "IllegalValueError - videoFullLength and renditions are mutually exclusive; you must set one or the other. (code 304)"
            // To prevent this exception, only submit Renditions if both are set

            // Additionally, Renditions may only be updated through the Media API in cases where they use a remote asset.
            // Don't submit renditions that lack a RemoteUrl, or the API will return an error.
            if (Renditions.Count > 0)
            {
                serialized["renditions"] = Renditions.Where(r => !String.IsNullOrEmpty(r.RemoteUrl));
            }
            else if (VideoFullLength != null && !String.IsNullOrEmpty(VideoFullLength.RemoteUrl))
            {
                serialized["videoFullLength"] = VideoFullLength;
            }
            if (IOSRenditions.Count > 0)
            {
                serialized["IOSRenditions"] = IOSRenditions.Where(r => !String.IsNullOrEmpty(r.RemoteUrl));
            }

            if (CuePoints.Count > 0)
            {
                serialized["cuePoints"] = CuePoints;
            }

            // The Id must be non-0.
            if (Id != 0)
            {
                serialized["id"] = Id;
            }

            return(serialized);
        }