Releases: Tarmil/FSharp.SystemTextJson
Version 1.3
- #151: Add optional argument
deserializeNullAsNone: bool
to option.WithSkippableOptionFields(SkippableOptionFields)
. When true, skippable option fields can be deserialized asNone
not only from a missing field, but also fromnull
.
Patch 1.2.42
Fix #172: NullReferenceException when serializing a null record.
Version 1.2
-
#154: Add
SkippableOptionFields
enum to further customize the skipping of fields of typeoption
andvoption
withWithSkippableOptionFields
.SkippableOptionFields.FromJsonSerializerOptions
is the default and equivalent toWithSkippableOptionFields(false)
: fields of typeoption
andvoption
are skipped if used withJsonIgnoreCondition.WhenWritingNull
.SkippableOptionFields.Always
is equivalent toWithSkippableOptionFields(true)
: fields of typeoption
andvoption
are always skipped.SkippableOptionFields.Never
: fields of typeoption
andvoption
are never skipped.
-
#159: Throw an exception when trying to deserialize
null
into a record or union in any context, rather than only when they are in fields of records and unions. -
#160: Fix
WithSkippableOptionFields(false)
not working forvoption
. -
#161: Allow using single-case unions as keys in all dictionary types.
NOTE: This requires System.Text.Json 8.0. -
#162: Add option
.WithMapFormat(MapFormat)
to customize the format of F# maps.MapFormat.Object
always serializes maps as objects. The key type must be supported as key for dictionaries.
NOTE: This requires System.Text.Json 8.0.MapFormat.ArrayOfPairs
always serializes maps as JSON arrays whose items are[key,value]
pairs.MapFormat.ObjectOrArrayOfPairs
is the default: maps whose keys are string or single-case unions wrapping string are serialized as JSON objects, and other maps are serialized as JSON arrays whose items are[key,value]
pairs.
-
#163: Add
StructuralComparison
to the typeSkippable<_>
. -
#164: When deserializing a record with
JsonIgnoreCondition.WhenWritingNull
, when a non-nullable field is missing, throw a properJsonException
rather than aNullReferenceException
.
Version 1.1
-
#141: Add fluent options builder.
JsonFSharpOptions
has the following new methods:- static methods that create options with default settings:
.Default()
,.NewtonsoftLike()
,.FSharpLuLike()
and.ThothLike()
. - instance methods
.WithOptionAbc(?bool)
for each flagJsonUnionEncoding.Abc
, that sets or unsets this option and returns a newJsonFSharpOptions
. - instance methods
.WithAbc(value)
for each optional argumentabc
of its constructor, that sets this option and returns a newJsonFSharpOptions
. - an instance method
.ToJsonSerializerOptions()
that returns a newJsonSerializerOptions
with the correspondingJsonFSharpConverter
configured. - an instance method
.AddToJsonSerializerOptions(options)
that takes an existingJsonSerializerOptions
, configures the correspondingJsonFSharpConverter
and returnsunit
.
The above is now the recommended way of configuring the library, and future options may be only made available using fluent methods and not using constructor arguments.
- static methods that create options with default settings:
-
#146: Add option
.WithSkippableOptionFields(?bool)
that makes fields of typeoption
andvoption
behave likeSkippable
:None
/ValueNone
is represented by a missing field instead of anull
value.This is equivalent to the pre-1.0 default behavior, and is now recommended if this behavior is desired instead of
IgnoreNullValues = true
orDefaultIgnoreCondition = WhenWritingNull
.
Version 1.0.7
- Fix regression #137: exception on serialization and deserialization of empty anonymous records.
Version 1.0.6
Fix regression #133: failure on non-public records.
Version 1.0
-
#89: Add
JsonNameAttribute
as a more powerful substitute for the standardJsonPropertyNameAttribute
.- When used on a discriminated union case,
JsonNameAttribute
can take a value of typeint
orbool
instead ofstring
. JsonNameAttribute
can take multiple values. When deserializing, all these values are treated as equivalent. When serializing, the first one is used.JsonNameAttribute
has a settable propertyField: string
. It is used to set the JSON name of a union case field with the given name.
- When used on a discriminated union case,
-
#92: Serialization of record properties (in addition to fields).
- Add option
includeRecordProperties: bool
to enable serializing record properties. - Also serialize record properties with
JsonIncludeAttribute
even whenincludeRecordProperties
is false.
- Add option
-
Add support for the standard
DefaultIgnoreCondition.WhenWritingNull
as a synonym forIgnoreNullValues = true
that allowsNone
andValueNone
to be omitted instead ofnull
. -
#123: BREAKING CHANGE: Missing fields of type
option
orvoption
now throw an error by default instead of being deserialized toNone
/ValueNone
. To support missing fields, either enable the optionIgnoreNullValues = true
orDefaultIgnoreCondition = WhenWritingNull
, or use the typeSkippable
instead ofoption
orvoption
. -
#126: Add option
types: JsonFSharpTypes
that specifies which types the F# converter should handle. Unlisted types will be handled by the defaultSystem.Text.Json
. By default, all supported types are handled.
Version 0.19
Version 0.18
-
#98: Implement
JsonPropertyOrderAttribute
on records. -
#108: Allow serializing unnamed union fields using their type name, instead of
Item1
etc, usingJsonUnionEncoding.UnionFieldNamesFromTypes
. -
#100: Allow unionTagName to be part of the record type definition when deserializing union of records.
-
#109: Add .xml with documentation comments to nupkg. Thanks @exyi!
-
#110: Allow customizing the naming policy for union fields with
unionFieldNamingPolicy
.
If not provided, useJsonSerializerOptions.PropertyNamingPolicy
as before.
Version 0.17
-
#87: Fix null checking on value type fields.
-
#93: Allow deserializing F# unions in
AdjacentTag
andInternalTag
modes where the tag is not the first field in the JSON object.
This capability is enabled by new optionJsonUnionEncoding.AllowUnorderedTag
, which is included inJsonUnionEncoding.Default
and allJsonUnionEncoding.*Like
combined formats.