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); }
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); }