@@ -99,7 +99,7 @@ public static string SerializeToString<T>(T value)
9999 }
100100 else
101101 {
102- JsonWriter < T > . WriteRootObject ( writer , value ) ;
102+ WriteObjectToWriter ( value , JsonWriter < T > . GetRootObjectWriteFn ( value ) , writer ) ;
103103 }
104104 return StringWriterThreadStatic . ReturnAndFree ( writer ) ;
105105 }
@@ -116,7 +116,7 @@ public static string SerializeToString(object value, Type type)
116116 else
117117 {
118118 OnSerialize ? . Invoke ( value ) ;
119- JsonWriter . GetWriteFn ( type ) ( writer , value ) ;
119+ WriteObjectToWriter ( value , JsonWriter . GetWriteFn ( type ) , writer ) ;
120120 }
121121 return StringWriterThreadStatic . ReturnAndFree ( writer ) ;
122122 }
@@ -141,7 +141,7 @@ public static void SerializeToWriter<T>(T value, TextWriter writer)
141141 }
142142 else
143143 {
144- JsonWriter < T > . WriteRootObject ( writer , value ) ;
144+ WriteObjectToWriter ( value , JsonWriter < T > . GetRootObjectWriteFn ( value ) , writer ) ;
145145 }
146146 }
147147
@@ -155,7 +155,7 @@ public static void SerializeToWriter(object value, Type type, TextWriter writer)
155155 }
156156
157157 OnSerialize ? . Invoke ( value ) ;
158- JsonWriter . GetWriteFn ( type ) ( writer , value ) ;
158+ WriteObjectToWriter ( value , JsonWriter . GetWriteFn ( type ) , writer ) ;
159159 }
160160
161161 public static void SerializeToStream < T > ( T value , Stream stream )
@@ -175,7 +175,7 @@ public static void SerializeToStream<T>(T value, Stream stream)
175175 else
176176 {
177177 var writer = new StreamWriter ( stream , JsConfig . UTF8Encoding , BufferSize , leaveOpen : true ) ;
178- JsonWriter < T > . WriteRootObject ( writer , value ) ;
178+ WriteObjectToWriter ( value , JsonWriter < T > . GetRootObjectWriteFn ( value ) , writer ) ;
179179 writer . Flush ( ) ;
180180 }
181181 }
@@ -184,10 +184,27 @@ public static void SerializeToStream(object value, Type type, Stream stream)
184184 {
185185 OnSerialize ? . Invoke ( value ) ;
186186 var writer = new StreamWriter ( stream , JsConfig . UTF8Encoding , BufferSize , leaveOpen : true ) ;
187- JsonWriter . GetWriteFn ( type ) ( writer , value ) ;
187+ WriteObjectToWriter ( value , JsonWriter . GetWriteFn ( type ) , writer ) ;
188188 writer . Flush ( ) ;
189189 }
190190
191+ private static void WriteObjectToWriter ( object value , WriteObjectDelegate serializeFn , TextWriter writer )
192+ {
193+ if ( ! JsConfig . Indent )
194+ {
195+ serializeFn ( writer , value ) ;
196+ }
197+ else
198+ {
199+ var sb = StringBuilderCache . Allocate ( ) ;
200+ using var captureJson = new StringWriter ( sb ) ;
201+ serializeFn ( captureJson , value ) ;
202+ captureJson . Flush ( ) ;
203+ var json = StringBuilderCache . ReturnAndFree ( sb ) ;
204+ var indentJson = json . IndentJson ( ) ;
205+ writer . Write ( indentJson ) ;
206+ }
207+ }
191208 public static T DeserializeFromStream < T > ( Stream stream )
192209 {
193210 return ( T ) MemoryProvider . Instance . Deserialize ( stream , typeof ( T ) , DeserializeFromSpan ) ;
0 commit comments