Skip to content

Commit 5c9d683

Browse files
[dotnet] Add reflection-based JSON serialization fallback to Commands (#14732)
1 parent f8d6c36 commit 5c9d683

File tree

2 files changed

+43
-1
lines changed

2 files changed

+43
-1
lines changed

dotnet/src/webdriver/Command.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
using System.Collections.Generic;
2222
using System.Text.Json;
2323
using System.Text.Json.Serialization;
24+
using System.Text.Json.Serialization.Metadata;
2425

2526
namespace OpenQA.Selenium
2627
{
@@ -35,7 +36,7 @@ public class Command
3536

3637
private readonly static JsonSerializerOptions s_jsonSerializerOptions = new()
3738
{
38-
TypeInfoResolver = CommandJsonSerializerContext.Default,
39+
TypeInfoResolver = JsonTypeInfoResolver.Combine(CommandJsonSerializerContext.Default, new DefaultJsonTypeInfoResolver()),
3940
Converters = { new ResponseValueJsonConverter() }
4041
};
4142

dotnet/test/common/CommandTests.cs

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// <copyright file="CommandTests.cs" company="Selenium Committers">
2+
// Licensed to the Software Freedom Conservancy (SFC) under one
3+
// or more contributor license agreements. See the NOTICE file
4+
// distributed with this work for additional information
5+
// regarding copyright ownership. The SFC licenses this file
6+
// to you under the Apache License, Version 2.0 (the
7+
// "License"); you may not use this file except in compliance
8+
// with the License. You may obtain a copy of the License at
9+
//
10+
// http://www.apache.org/licenses/LICENSE-2.0
11+
//
12+
// Unless required by applicable law or agreed to in writing,
13+
// software distributed under the License is distributed on an
14+
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
// KIND, either express or implied. See the License for the
16+
// specific language governing permissions and limitations
17+
// under the License.
18+
// </copyright>
19+
20+
using NUnit.Framework;
21+
using System.Collections.Generic;
22+
23+
namespace OpenQA.Selenium
24+
{
25+
[TestFixture]
26+
public class CommandTests
27+
{
28+
[Test]
29+
public void CommandSerializesAnonymousType()
30+
{
31+
var parameters = new Dictionary<string, object>
32+
{
33+
["arg"] = new { param1 = true, param2 = false },
34+
};
35+
36+
var command = new Command(new SessionId("session"), "test command", parameters);
37+
38+
Assert.That(command.ParametersAsJsonString, Is.EqualTo("""{"arg":{"param1":true,"param2":false}}"""));
39+
}
40+
}
41+
}

0 commit comments

Comments
 (0)