Skip to content

Commit b9afa85

Browse files
Merge branch 'master' into users/Meghana-Palaparthi/DTS_timeout_handling
2 parents 27448e4 + 71d317f commit b9afa85

3 files changed

Lines changed: 50 additions & 6 deletions

File tree

Microsoft.Azure.Cosmos/src/CosmosClientOptions.cs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,7 @@ public ConnectionMode ConnectionMode
503503
/// ]]>
504504
/// </code>
505505
/// </example>
506+
[JsonConverter(typeof(ClientOptionJsonConverter))]
506507
public System.Text.Json.JsonSerializerOptions UseSystemTextJsonSerializerWithOptions
507508
{
508509
get => this.stjSerializerOptions;
@@ -1401,14 +1402,19 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
14011402
return;
14021403
}
14031404

1404-
CosmosJsonSerializerWrapper cosmosJsonSerializerWrapper = value as CosmosJsonSerializerWrapper;
1405-
if (value is CosmosJsonSerializerWrapper)
1405+
if (value is System.Text.Json.JsonSerializerOptions)
1406+
{
1407+
writer.WriteValue(value.GetType().ToString());
1408+
return;
1409+
}
1410+
1411+
if (value is CosmosJsonSerializerWrapper cosmosJsonSerializerWrapper)
14061412
{
14071413
writer.WriteValue(cosmosJsonSerializerWrapper.InternalJsonSerializer.GetType().ToString());
1414+
return;
14081415
}
14091416

1410-
CosmosSerializer cosmosSerializer = value as CosmosSerializer;
1411-
if (cosmosSerializer is CosmosSerializer)
1417+
if (value is CosmosSerializer cosmosSerializer)
14121418
{
14131419
writer.WriteValue(cosmosSerializer.GetType().ToString());
14141420
}

Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Contracts/DotNetSDKAPI.net6.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3155,9 +3155,11 @@
31553155
"Attributes": [],
31563156
"MethodInfo": "System.Text.Json.JsonSerializerOptions get_UseSystemTextJsonSerializerWithOptions();IsAbstract:False;IsStatic:False;IsVirtual:False;IsGenericMethod:False;IsConstructor:False;IsFinal:False;"
31573157
},
3158-
"System.Text.Json.JsonSerializerOptions UseSystemTextJsonSerializerWithOptions": {
3158+
"System.Text.Json.JsonSerializerOptions UseSystemTextJsonSerializerWithOptions[Newtonsoft.Json.JsonConverterAttribute(typeof(Microsoft.Azure.Cosmos.CosmosClientOptions+ClientOptionJsonConverter))]": {
31593159
"Type": "Property",
3160-
"Attributes": [],
3160+
"Attributes": [
3161+
"JsonConverterAttribute"
3162+
],
31613163
"MethodInfo": "System.Text.Json.JsonSerializerOptions UseSystemTextJsonSerializerWithOptions;CanRead:True;CanWrite:True;System.Text.Json.JsonSerializerOptions get_UseSystemTextJsonSerializerWithOptions();IsAbstract:False;IsStatic:False;IsVirtual:False;IsGenericMethod:False;IsConstructor:False;IsFinal:False;Void set_UseSystemTextJsonSerializerWithOptions(System.Text.Json.JsonSerializerOptions);IsAbstract:False;IsStatic:False;IsVirtual:False;IsGenericMethod:False;IsConstructor:False;IsFinal:False;"
31623164
},
31633165
"System.TimeSpan get_RequestTimeout()[System.Runtime.CompilerServices.CompilerGeneratedAttribute()]": {

Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/CosmosClientOptionsUnitTests.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -726,6 +726,42 @@ public void ThrowOnSerializerOptionsWithSTJSerializerEnabled(
726726
};
727727
}
728728

729+
[TestMethod]
730+
public void GetSerializedConfiguration_WithSTJSerializerOptions_DoesNotThrow()
731+
{
732+
System.Text.Json.JsonSerializerOptions jsonSerializerOptions = new System.Text.Json.JsonSerializerOptions()
733+
{
734+
PropertyNamingPolicy = System.Text.Json.JsonNamingPolicy.CamelCase,
735+
};
736+
737+
// Set a TypeInfoResolver via reflection to reproduce the circular reference
738+
// scenario from the bug report (TypeInfoResolver → Options → TypeInfoResolver).
739+
// TypeInfoResolver was introduced in .NET 7 and is not available at compile time
740+
// with the STJ 6.0 package reference, but is available at runtime on .NET 7+.
741+
PropertyInfo typeInfoResolverProp = typeof(System.Text.Json.JsonSerializerOptions)
742+
.GetProperty("TypeInfoResolver");
743+
744+
if (typeInfoResolverProp != null)
745+
{
746+
Type defaultResolverType = typeof(System.Text.Json.JsonSerializerOptions).Assembly
747+
.GetType("System.Text.Json.Serialization.Metadata.DefaultJsonTypeInfoResolver");
748+
749+
if (defaultResolverType != null)
750+
{
751+
typeInfoResolverProp.SetValue(jsonSerializerOptions, Activator.CreateInstance(defaultResolverType));
752+
}
753+
}
754+
755+
CosmosClientOptions options = new CosmosClientOptions()
756+
{
757+
UseSystemTextJsonSerializerWithOptions = jsonSerializerOptions,
758+
};
759+
760+
string serializedConfig = options.GetSerializedConfiguration();
761+
Assert.IsNotNull(serializedConfig);
762+
Assert.IsTrue(serializedConfig.Contains("System.Text.Json.JsonSerializerOptions"));
763+
}
764+
729765
[TestMethod]
730766
[ExpectedException(typeof(ArgumentNullException))]
731767
public void ThrowOnNullTokenCredential()

0 commit comments

Comments
 (0)