public DocumentJsonWriter(TextWriter textWriter, DocumentSerializationMeta documentMeta, SerializationConventions conventions, IEntityReflector entityReflector)
            : base(textWriter)
        {
            EnsureArg.IsNotNull(documentMeta, nameof(documentMeta));
            EnsureArg.IsNotNull(conventions, nameof(conventions));
            EnsureArg.IsNotNull(entityReflector, nameof(entityReflector));

            HasWrittenDocumentMeta = false;
            DocumentMeta           = documentMeta;
            Conventions            = conventions;
            ConventionWriter       = new SerializationConventionWriter(this);
            EntityReflector        = entityReflector;
            CloseOutput            = false;
        }
        public SerializationConfiguration(IContractResolver contractResolver)
        {
            EnsureArg.IsNotNull(contractResolver, nameof(contractResolver));

            Settings = new JsonSerializerSettings
            {
                TypeNameHandling      = TypeNameHandling.None,
                ConstructorHandling   = ConstructorHandling.AllowNonPublicDefaultConstructor,
                ContractResolver      = contractResolver,
                DateFormatHandling    = DateFormatHandling.IsoDateFormat,
                DateTimeZoneHandling  = DateTimeZoneHandling.RoundtripKind,
                Formatting            = Formatting.None,
                DefaultValueHandling  = DefaultValueHandling.Include,
                MissingMemberHandling = MissingMemberHandling.Ignore,
                NullValueHandling     = NullValueHandling.Ignore
            };
            Settings.Converters.Add(new StringEnumConverter());
            Conventions = new SerializationConventions();
        }