anchor.diff:      | MapOrDictWithNonStringKey = 7
       | Long = 8
       | BigInt = 9
  +    | TimeSpan = 10
   
   /// Helper for serializing map/dict with non-primitive, non-string keys such as unions and records.
   /// Performs additional serialization/deserialization of the key object and uses the resulting JSON
  
positive.code:                 let universalTime = if dt.Kind = DateTimeKind.Local then dt.ToUniversalTime() else dt
                  // Make sure the DateTime is saved in UTC and ISO format (see #604)
                  serializer.Serialize(writer, universalTime.ToString("O"))
              | true, Kind.Option ->
                  let _,fields = FSharpValue.GetUnionFields(value, t)
                  serializer.Serialize(writer, fields.[0])
  
negative.code:             | _ ->
                  let json = serializer.Deserialize(reader, typeof<string>) :?> string
                  upcast DateTime.Parse(json)
          | true, Kind.TimeSpan ->
              match reader.Value with
              | :? TimeSpan -> reader.Value // Avoid culture-sensitive string roundtrip for already parsed dates (see #613).
              | _ ->
                  let json = serializer.Deserialize(reader, typeof<int>) :?> int
                  let ts = TimeSpan.FromMilliseconds (float json)
                  upcast ts
          | true, Kind.Option ->
              let innerType = t.GetGenericArguments().[0]
              let innerType =
  