open System.Collections.Generic
open System.Runtime.Serialization.Formatters
open System.ComponentModel.DataAnnotations
open System.Globalization
open Newtonsoft.Json.Linq
open Newtonsoft.Json.Converters
open Newtonsoft.Json.Serialization
let jsonToStream(value:'T) =
let serializer = new JsonSerializer()
let std = new IO.MemoryStream()
( use sw = new StreamWriter(std, new UTF8Encoding(false, true), 1024, true)
use json = new JsonTextWriter(sw, CloseOutput = false)
serializer.Serialize(json, value))
type Person(name:string, ?birthDate) =
member x.BirthDate = defaultArg birthDate System.DateTime.MinValue
let p = new Person ("John", DateTime.Today)
printfn "\nAfter jsonToStream(), st.Position=%i" st.Position
let sw = new StreamReader(st)
let jsonString = sw.ReadToEnd()
printfn "\nResult using JsonConvert.SerializeObject():\n%s" jsonString
let jsonConvertString = (JsonConvert.SerializeObject(p))
printfn "\nResult using JsonConvert.SerializeObject():\n%s" jsonConvertString
if jsonString = jsonConvertString then
printfn "\nResult are identical."
raise (System.ApplicationException("Result are NOT identical!"))