Skip to content

Releases: Tarmil/FSharp.SystemTextJson

Version 0.16

20 Jan 10:09
Compare
Choose a tag to compare
  • #83: Fix null reference exception when deserializing a record that Skips a field with FSharp.Core 5.0.
  • Remove netcoreapp3.0 specific build.

Version 0.15

21 Nov 14:57
Compare
Choose a tag to compare
  • #77: Fix compile-time error when publishing a trimmed .NET 5 application. Thanks @pchalamet!

Version 0.14

06 Oct 15:36
Compare
Choose a tag to compare
  • #71: Allow overriding specific types in JsonFSharpConverter with new argument overrides. These override even types that have JsonFSharpConverterAttribute when allowOverride = true.

Version 0.13

06 Oct 13:50
Compare
Choose a tag to compare
  • #69: Allow overriding JsonFSharpConverter options with JsonFSharpConverterAttribute by passing allowOverride = true to JsonFSharpConverter.
  • Add JsonUnionEncoding.Inherit. When this flag is set on a JsonFSharpConverterAttribute that overrides a JsonFSharpConverter, this type still uses the JsonFSharpConverter's JsonUnionEncoding.

Version 0.12

21 Jul 19:41
Compare
Choose a tag to compare
  • #56: Add JsonUnionEncoding.UnwrapRecordCases, which implies JsonUnionEncoding.NamedFields and encodes union cases containing a single record field as if the record's fields were the union's fields instead. For example:
    type U =
        | U of r: {| x: int; y: bool |}
    
    U {| x = 1; y = true |}
    // Serialized as: {"Case":"U","Fields":{"x":1,"y":true}}
    // Instead of:    {"Case":"U","Fields":{"r":{"x":1,"y":true}}}
    This option is compatible with all union formats (AdjacentTag, ExternalTag, InternalTag and Untagged).
  • #64: Fix serialization of unit as field of an F# type. Thanks @NickDarvey!

Version 0.11

05 Apr 17:14
Compare
Choose a tag to compare
  • #54: Do throw an exception when a mandatory field is missing and an optional field was omitted. Thanks @fuchen!

  • #57: Do throw an exception when a parsed value is null inside an array, a set or a tuple, unless allowNullFields is true. Thanks @drhumlen!

Version 0.10

02 Mar 16:55
Compare
Choose a tag to compare
  • #47: Add Skippable<'T> to represent values that can be omitted from the serialization of a record or a union with NamedFields. This is particularly useful with Skippable<'T option> (or voption) to represent a field that can be omitted, null, or have a proper value.
    type R = { x: Skippable<int option> }
    
    { x = Skip }              // Serialized as: {}
    { x = Include None }      // Serialized as: {"x":null}
    { x = Include (Some 42) } // Serialized as: {"x":42}
    Also add a Skippable module with standard functions: map, filter, etc. Implementation largely based on @cmeeren's JsonSkippable which provides the same functionality for Newtonsoft.Json.
  • #51: When the type K is a single-case union wrapping a string, serialize Map<K, V> into a JSON object, like Map<string, V>.
  • Allow OR-ing a base JsonUnionEncoding (AdjacentTag, InternalTag, ExternalTag or Untagged) with Default to use the default extra options (UnwrapOption ||| UnwrapSingleCaseUnions).

Version 0.9

27 Feb 16:32
Compare
Choose a tag to compare
  • #43: In deserialization, allow omitting fields that are optional.
  • In deserialization, when a field is missing, find which one it is and name it in the error message.

Version 0.8

31 Jan 10:18
Compare
Choose a tag to compare
  • #30: Unwrap 'T voption with JsonUnionEncoding.UnwrapOption. Thanks @johlrich!

  • #32: Add JsonUnionEncoding.UnwrapSingleFieldCases, which encodes the field of single-field cases as x instead of [x]. Include it in JsonUnionEncoding.FSharpLuLike.

  • #33: Fix "read too much or not enough" when parsing a list of unions with JsonUnionEncoding.UnwrapFieldlessTags.

  • #36: BREAKING CHANGE: During deserialization, throw an exception when a field of a record or union has value null, unless the type of this field is option, voption, or a union with UseNullAsTrueValue. Thanks @drhumlen!

    New option allowNullFields disables this behavior.

  • #38: Add more consistent names for options:

    • BareFieldlessTags becomes UnwrapFieldlessTags;
    • SuccintOption becomes UnwrapOption;
    • EraseSingleCaseUnions becomes UnwrapSingleCaseUnions.

    The previous names are marked Obsolete.

Version 0.7

23 Nov 17:15
Compare
Choose a tag to compare
  • #3: Add support for PropertyNamingPolicy on record and union fields.
  • #22: Add support for DictionaryKeyPolicy for Map<string, 'T>.
  • #27: Add unionTagNamingPolicy option to JsonFSharpConverter and JsonFSharpConverterAttribute to customize the naming policy for union tag names.
  • #26: Add JsonUnionEncoding.EraseSingleCaseUnions, which encodes single-case single-field unions the same as the value in the field.
    BREAKING CHANGE: This is now the default option.
  • #5: Add support for PropertyNameCaseInsensitive on record and union fields.
    Add unionTagCaseInsensitive option to JsonFSharpConverter and JsonFSharpConverterAttribute to customize the case sensitivity for union tag names.