Пример #1
0
        protected static ExpandableField <T> SetExpandableFieldObject <T>(T obj, ExpandableField <T> expandable) where T : IHasId
        {
            if (expandable == null)
            {
                expandable = new ExpandableField <T>();
            }

            expandable.ExpandedObject = obj;

            return(expandable);
        }
Пример #2
0
        protected static ExpandableField <T> SetExpandableFieldId <T>(string id, ExpandableField <T> expandable) where T : IHasId
        {
            if (expandable == null)
            {
                expandable    = new ExpandableField <T>();
                expandable.Id = id;
            }
            else if (expandable.Id != id)
            {
                expandable.ExpandedObject = default;
                expandable.Id             = id;
            }

            return(expandable);
        }
        /// <summary>
        /// Reads the JSON representation of the object.
        /// </summary>
        /// <param name="reader">The <see cref="JsonReader"/> to read from.</param>
        /// <param name="objectType">Type of the object.</param>
        /// <param name="existingValue">The existing value of object being read.</param>
        /// <param name="serializer">The calling serializer.</param>
        /// <returns>The object value.</returns>
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            var value = new ExpandableField <T>();

            switch (reader.TokenType)
            {
            case JsonToken.Null:
                // Do nothing
                break;

            case JsonToken.String:
                value.Id = (string)reader.Value;
                break;

            case JsonToken.StartObject:
                var jObject = JObject.Load(reader);

                using (var subReader = jObject.CreateReader())
                {
                    value.ExpandedObject = (T)base.ReadJson(
                        subReader, typeof(T), value.ExpandedObject, serializer);
                }

                // If we failed to deserialize the expanded object (e.g. because of an unknown
                // type), make a last ditch attempt at getting the ID.
                if (value.ExpandedObject == null)
                {
                    value.Id = (string)jObject["id"];
                }

                break;

            default:
                throw new JsonSerializationException(string.Format(
                                                         "Unexpected token when converting ExpandableField: {0}.",
                                                         reader.TokenType.ToString()));
            }

            return(value);
        }