Advertisement
Guest User

Untitled

a guest
Mar 26th, 2019
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 1.44 KB | None | 0 0
  1. open Utf8Json
  2. open Utf8Json.Resolvers
  3. open Utf8Json.FSharp
  4.  
  5. CompositeResolver.RegisterAndSetAsDefault(
  6.   FSharpResolver.Instance,
  7.   EnumResolver.UnderlyingValue,
  8.   StandardResolver.Default
  9. )
  10.  
  11. type ENUM = A = 0 | B = 1
  12.  
  13. [<JsonFormatter(typeof<DUFormatter>)>]
  14. type DU = A | B | C
  15. and DUFormatter() =
  16.     interface IJsonFormatter<DU> with
  17.         override x.Serialize(writer : byref<JsonWriter>, value:DU, resolver : IJsonFormatterResolver) =
  18.             writer.WriteString(value.ToString())
  19.            
  20.         override x.Deserialize(reader : byref<JsonReader>, resolver : IJsonFormatterResolver) =
  21.             let str = reader.ReadString()
  22.             match str with
  23.             | "A" -> A
  24.             | "B" -> B
  25.             | "C" -> C
  26.             | _ -> failwithf "This is not the case of DU union: %A" str
  27.    
  28. type SUBRECORD = {
  29.     subField: float
  30. }
  31.  
  32. type RECORD = {
  33.     field : int
  34.     field2 : string
  35.     field3 : SUBRECORD
  36. }
  37.  
  38. [<EntryPoint>]
  39. let main argv =
  40.     let a = Some "Hello world"
  41.     let r = {
  42.         field = 10
  43.         field2 = "Hello"
  44.         field3 = {
  45.             subField = 42.0
  46.         }
  47.     }
  48.    
  49.     let s = JsonSerializer.ToJsonString ENUM.B
  50.     let s2 = JsonSerializer.ToJsonString DU.B
  51.     let s3 = JsonSerializer.ToJsonString a
  52.     let s4 = JsonSerializer.ToJsonString r
  53.    
  54.     let zz = JsonSerializer.Deserialize<DU> s2
  55.     printfn "%A" zz
  56.    
  57.     printfn "%s %s %s %s" s s2 s3 s4
  58.     0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement