@@ -154,4 +154,115 @@ public void ReflectionBased_CompleteModel_WithAttribute_WithNullValues()
154154 Assert . Null ( deserializedModel . NullableDateTimeOffsetProperty ) ;
155155 Assert . Equal ( expectedJson , json ) ;
156156 }
157+
158+ [ Fact ]
159+ public void SourceGenerator_WithResolver_WithAttribute_UsingOptions ( )
160+ {
161+ // Arrange
162+ var sourceGenOptions = new JsonSerializerOptions
163+ {
164+ WriteIndented = true ,
165+ TypeInfoResolver = new DateTimeConverterResolver ( TestModelSourceGeneratorJsonSerializerContext . Default )
166+ } ;
167+ var originalModel = new SourceGeneratorWithResolverModel
168+ {
169+ DateTimeProperty = new DateTime ( 2023 , 10 , 1 , 12 , 0 , 0 , DateTimeKind . Utc ) ,
170+ NullableDateTimeProperty = new DateTime ( 2023 , 10 , 1 , 12 , 0 , 0 , DateTimeKind . Utc ) ,
171+ DateTimeOffsetProperty = new DateTimeOffset ( 2023 , 10 , 1 , 12 , 0 , 0 , TimeSpan . Zero ) ,
172+ NullableDateTimeOffsetProperty = new DateTimeOffset ( 2023 , 10 , 1 , 12 , 0 , 0 , TimeSpan . Zero )
173+ } ;
174+ const string expectedJson = """
175+ {
176+ "DateTimeProperty": "2023-10-01T12:00:00",
177+ "NullableDateTimeProperty": "2023-10-01T12:00:00",
178+ "DateTimeOffsetProperty": "2023-10-01T12:00:00.000Z",
179+ "NullableDateTimeOffsetProperty": "2023-10-01T12:00:00.000Z"
180+ }
181+ """ ;
182+
183+ // Act
184+ var json = JsonSerializer . Serialize ( originalModel , sourceGenOptions ) ;
185+ var deserializedModel = JsonSerializer . Deserialize < SourceGeneratorWithResolverModel > ( json , sourceGenOptions ) ;
186+
187+ // Assert
188+ Assert . NotNull ( deserializedModel ) ;
189+ Assert . Equal ( originalModel . DateTimeProperty , deserializedModel . DateTimeProperty ) ;
190+ Assert . Equal ( originalModel . NullableDateTimeProperty , deserializedModel . NullableDateTimeProperty ) ;
191+ Assert . Equal ( originalModel . DateTimeOffsetProperty , deserializedModel . DateTimeOffsetProperty ) ;
192+ Assert . Equal ( originalModel . NullableDateTimeOffsetProperty , deserializedModel . NullableDateTimeOffsetProperty ) ;
193+ Assert . Equal ( expectedJson , json ) ;
194+ }
195+
196+ [ Fact ]
197+ public void SourceGenerator_WithResolver_WithAttribute_UsingContext ( )
198+ {
199+ // Arrange
200+ var testModelType = typeof ( SourceGeneratorWithResolverModel ) ;
201+ var context = new DateTimeConverterResolver ( TestModelSourceGeneratorJsonSerializerContext . Default ) ;
202+ var originalModel = new SourceGeneratorWithResolverModel
203+ {
204+ DateTimeProperty = new DateTime ( 2023 , 10 , 1 , 12 , 0 , 0 , DateTimeKind . Utc ) ,
205+ NullableDateTimeProperty = new DateTime ( 2023 , 10 , 1 , 12 , 0 , 0 , DateTimeKind . Utc ) ,
206+ DateTimeOffsetProperty = new DateTimeOffset ( 2023 , 10 , 1 , 12 , 0 , 0 , TimeSpan . Zero ) ,
207+ NullableDateTimeOffsetProperty = new DateTimeOffset ( 2023 , 10 , 1 , 12 , 0 , 0 , TimeSpan . Zero )
208+ } ;
209+ const string expectedJson = """
210+ {
211+ "DateTimeProperty": "2023-10-01T12:00:00",
212+ "NullableDateTimeProperty": "2023-10-01T12:00:00",
213+ "DateTimeOffsetProperty": "2023-10-01T12:00:00.000Z",
214+ "NullableDateTimeOffsetProperty": "2023-10-01T12:00:00.000Z"
215+ }
216+ """ ;
217+
218+ // Act
219+ var json = JsonSerializer . Serialize ( originalModel , testModelType , context ) ;
220+ var deserializedModel = ( SourceGeneratorWithResolverModel ? ) JsonSerializer . Deserialize ( json , testModelType , context ) ;
221+
222+ // Assert
223+ Assert . NotNull ( deserializedModel ) ;
224+ Assert . Equal ( originalModel . DateTimeProperty , deserializedModel . DateTimeProperty ) ;
225+ Assert . Equal ( originalModel . NullableDateTimeProperty , deserializedModel . NullableDateTimeProperty ) ;
226+ Assert . Equal ( originalModel . DateTimeOffsetProperty , deserializedModel . DateTimeOffsetProperty ) ;
227+ Assert . Equal ( originalModel . NullableDateTimeOffsetProperty , deserializedModel . NullableDateTimeOffsetProperty ) ;
228+ Assert . Equal ( expectedJson , json ) ;
229+ }
230+
231+ [ Fact ]
232+ public void SourceGenerator_WithResolver_WithAttribute_WithNullValues_UsingOptions ( )
233+ {
234+ // Arrange
235+ var sourceGenOptions = new JsonSerializerOptions
236+ {
237+ WriteIndented = true ,
238+ TypeInfoResolver = new DateTimeConverterResolver ( TestModelSourceGeneratorJsonSerializerContext . Default )
239+ } ;
240+ var originalModel = new SourceGeneratorWithResolverModel
241+ {
242+ DateTimeProperty = new DateTime ( 2023 , 10 , 1 , 12 , 0 , 0 , DateTimeKind . Utc ) ,
243+ NullableDateTimeProperty = null ,
244+ DateTimeOffsetProperty = new DateTimeOffset ( 2023 , 10 , 1 , 12 , 0 , 0 , TimeSpan . Zero ) ,
245+ NullableDateTimeOffsetProperty = null
246+ } ;
247+ const string expectedJson = """
248+ {
249+ "DateTimeProperty": "2023-10-01T12:00:00",
250+ "NullableDateTimeProperty": null,
251+ "DateTimeOffsetProperty": "2023-10-01T12:00:00.000Z",
252+ "NullableDateTimeOffsetProperty": null
253+ }
254+ """ ;
255+
256+ // Act
257+ var json = JsonSerializer . Serialize ( originalModel , sourceGenOptions ) ;
258+ var deserializedModel = JsonSerializer . Deserialize < SourceGeneratorWithResolverModel > ( json , sourceGenOptions ) ;
259+
260+ // Assert
261+ Assert . NotNull ( deserializedModel ) ;
262+ Assert . Equal ( originalModel . DateTimeProperty , deserializedModel . DateTimeProperty ) ;
263+ Assert . Null ( deserializedModel . NullableDateTimeProperty ) ;
264+ Assert . Equal ( originalModel . DateTimeOffsetProperty , deserializedModel . DateTimeOffsetProperty ) ;
265+ Assert . Null ( deserializedModel . NullableDateTimeOffsetProperty ) ;
266+ Assert . Equal ( expectedJson , json ) ;
267+ }
157268}
0 commit comments