POCO:
[JsonConverter(typeof(LineItemConverter))] public virtual ICollectionLineItems { get; set; }
JsonConverter:
public class LineItemConverter : JsonConverter { public override bool CanConvert(Type objectType) { return typeof(LineItem).IsAssignableFrom(objectType); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var lineitems = JArray.Load(reader); var lineItemObjects = new List(); foreach (var lineitem in lineitems) { switch (EnumUtil.ParseEnum (lineitem["lineItemType"].Value ())) { case LineItemType.Assessorial: lineItemObjects.Add(lineitem.ToObject ()); break; case LineItemType.DeficitWeight: lineItemObjects.Add(lineitem.ToObject ()); break; case LineItemType.Discount: lineItemObjects.Add(lineitem.ToObject ()); break; case LineItemType.FloorAdjustment: lineItemObjects.Add(lineitem.ToObject ()); break; case LineItemType.Freight: lineItemObjects.Add(lineitem.ToObject ()); break; case LineItemType.Fuel: lineItemObjects.Add(lineitem.ToObject ()); break; case LineItemType.Other: lineItemObjects.Add(lineitem.ToObject ()); break; default: break; } } return lineItemObjects; } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { var lineitems = value as ICollection ; serializer.Serialize(writer, lineitems.ToArray()); }