namespace Nessos.FsPickler.Json
    open System
    open Nessos.FsPickler
    type internal OAttribute = System.Runtime.InteropServices.OptionalAttribute
    type internal DAttribute = System.Runtime.InteropServices.DefaultParameterValueAttribute
    /// 
    ///     Json pickler instance.
    /// 
    type JsonSerializer =
        inherit FsPicklerTextSerializer
        
        val private format : JsonPickleFormatProvider
        /// 
        ///     Initializes a new Json pickler instance.
        /// 
        /// indent out Json pickles.
        /// omit FsPickler header in Json pickles.
        /// specify a custom type name converter.
        new ([] ?indent, [] ?omitHeader, [] ?typeConverter) =
            let indent = defaultArg indent false
            let omitHeader = defaultArg omitHeader false
            let json = new JsonPickleFormatProvider(indent, omitHeader)
            { 
                inherit FsPicklerTextSerializer(json, ?typeConverter = typeConverter)
                format = json    
            }
        /// 
        ///     Gets or sets whether Json output should be indented.
        /// 
        member x.Indent
            with get () = x.format.Indent
            and set b = x.format.Indent <- b
        /// 
        ///     Gets or sets whether FsPickler headers should be ignored in pickle format.
        /// 
        member x.OmitHeader
            with get () = x.format.OmitHeader
            and set b = x.format.OmitHeader <- b
        /// 
        ///     Gets or sets a non-null whitespace string that serves as a custom, top-level sequence separator.
        /// 
        member x.SequenceSeparator
            with get () = x.format.SequenceSeparator
            and set sep = x.format.SequenceSeparator <- sep
        /// 
        ///     Gets or sets whether top-level sequences should be serialized using the custom separator.
        /// 
        member x.UseCustomTopLevelSequenceSeparator
            with get () = x.format.UseCustomTopLevelSequenceSeparator
            and set e = x.format.UseCustomTopLevelSequenceSeparator <- e
    /// 
    ///     BSON pickler instance.
    /// 
    type BsonSerializer([] ?typeConverter) =
        inherit FsPicklerSerializer(new BsonPickleFormatProvider(), ?typeConverter = typeConverter)
    /// FsPickler static methods.
    type FsPickler =
        /// 
        ///     Initializes a new Json pickler instance.
        /// 
        /// indent out Json pickles.
        /// omit FsPickler header in Json pickles.
        /// specify a custom type name converter.
        static member CreateJson([] ?indent, [] ?omitHeader, [] ?typeConverter) = 
            new JsonSerializer(?indent = indent, ?omitHeader = omitHeader, ?typeConverter = typeConverter)
        /// 
        ///     Initializes a new Bson pickler instance.
        /// 
        /// specify a custom type name converter.
        static member CreateBson([] ?typeConverter) = 
            new BsonSerializer(?typeConverter = typeConverter)