anchor.diff:      let isRegisteredParentType (tp: Type) =
           inheritedConverterTypes.ContainsKey(tp.FullName)
   
  -    static let deserializeInheritedTypeJsonConverters : JsonConverter[] = [|DeserializeInheritedTypeJsonConverter()|]
  -
  -    member x.IsRegisteredInherientedType (tp: Type) =
  -        let fullName = tp.FullName
  -        inheritedConverterTypes.Values
  -                        |> Seq.concat
  -                        |> Seq.exists (fun inheritedType ->
  -                            inheritedType.FullName = fullName
  -                        )
       override x.CanConvert(t) =
           let kind =
               jsonConverterTypes.GetOrAdd(t, fun t ->
  
positive.code:                 let mapSerializer = typedefof<MapSerializer<_,_>>.MakeGenericType mapTypes
                  let mapSerializeMethod = mapSerializer.GetMethod("Serialize")
                  mapSerializeMethod.Invoke(null, [| value; writer; serializer |]) |> ignore
              | true, Kind.Other when x.IsRegisteredInherientedType t ->
                  let typeName = 
                      t.FullName
  
                  let fieldInfos = value.GetType().GetFields()
                  
                  /// write type name to json as type info 
                  if fieldInfos.Length = 0 then
                      serializer.Serialize(writer, typeName)
                  else
                      writer.WriteStartObject()
                      writer.WritePropertyName("TypeName")
                      writer.WriteValue(typeName)
                      fieldInfos |> Array.iter (fun fi ->
                          let field = fi.GetValue(value)
                          let name = fi.Name
                          writer.WritePropertyName(name)
                          serializer.Serialize(writer,field)
                      )        
                      writer.WriteEndObject()    
              | true, _ ->                
                  serializer.Serialize(writer, value)
  
  
negative.code:     let inheritedConverterTypes = ConcurrentDictionary<string,HashSet<Type>>()
  
  open Cache
  
  /// Converts F# options, tuples and unions to a format understandable
  /// A derivative of Fable's JsonConverter. Code adapted from Lev Gorodinski's original.
  /// See https://goo.gl/F6YiQk
  type FSharpJsonConverter() =
      inherit Newtonsoft.Json.JsonConverter()
      let advance(reader: JsonReader) =
          reader.Read() |> ignore
  