You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I am writing an asp.net webapi program and in the setup section I added Services.AddJsonOptions( ... JsonFSharpOptions). The options is WithUnionInternalTag, which is used for default serialization. But for individual types, you need to use Untagged serialization.
I found that [<JsonFSharpConverter(UnionEncoding=(JsonUnionEncoding.Untagged))>] Attribute doesn't seem to work.
[<JsonFSharpConverter(UnionEncoding=(JsonUnionEncoding.Untagged))>]typeUntagged1= A ofint| B ofstring[<Fact>]let``test tag`` ()=letoptInternalTag=
JsonFSharpOptions()
.WithUnionInternalTag()// <-
.WithUnionAllowUnorderedTag()
.WithUnionUnwrapFieldlessTags()
.WithUnwrapOption()
.ToJsonSerializerOptions()letb= B "bbb"letjsonB= JsonSerializer.Serialize(b, optInternalTag)letvalueB= JsonSerializer.Deserialize<Untagged1>("bbb", optInternalTag)
How should I configure it so that I can use options as the default serialization and Attribute as the individually specified serialization in an asp.net application?
The text was updated successfully, but these errors were encountered:
Hi there, I've used other solutions before, and now that I've had time to continue testing the solution you mentioned WithAllowOverride, I've found that it doesn't work as expected either!
#r "nuget: FSharp.SystemTextJson, 1.3.13"openSystem.Text.Json.SerializationopenSystem.Text.Json[<JsonFSharpConverter(UnionEncoding=(JsonUnionEncoding.Untagged))>]typeUntagged1= A ofint| B ofstringletoptInternalTag=
JsonFSharpOptions()
.WithUnionInternalTag()// <-
.WithUnionAllowUnorderedTag()
.WithUnionUnwrapFieldlessTags()
.WithUnwrapOption()
.WithAllowOverride()// add
.ToJsonSerializerOptions()letvalB= B "bbb"letjsonB= JsonSerializer.Serialize(valB, optInternalTag)
jsonB |> printfn "%A"// expect: jsonB = "bbb"; actual: jsonB = "{"Item":"bbb"}"letvalueB= JsonSerializer.Deserialize<Untagged1>("bbb", optInternalTag)// ^ System.Text.Json.JsonException: 'b' is an invalid start of a value. // Path: $ | LineNumber: 0 | BytePositionInLine: 0.
I am writing an asp.net webapi program and in the setup section I added
Services.AddJsonOptions( ... JsonFSharpOptions)
. The options isWithUnionInternalTag
, which is used for default serialization. But for individual types, you need to useUntagged
serialization.I found that
[<JsonFSharpConverter(UnionEncoding=(JsonUnionEncoding.Untagged))>]
Attribute doesn't seem to work.Code version information:
Test Code:
How should I configure it so that I can use options as the default serialization and Attribute as the individually specified serialization in an asp.net application?
The text was updated successfully, but these errors were encountered: