.NET 7测试应用升级至.NET 8(BrowserStack)后出现JSON问题
解决.NET8升级后Appium/Selenium的Json序列化异常
问题原因
这个错误是因为Selenium/Appium使用的**源生成式Json序列化器(OpenQA.Selenium.CommandJsonSerializerContext)**没有包含System.Text.Json.JsonElement类型的序列化元数据。升级到.NET8后,System.Text.Json的源生成规则或依赖库的版本兼容性变化,导致原本能处理的类型现在不被支持。
解决方案
1. 升级依赖库到适配.NET8的版本
先确保所有相关NuGet包是支持.NET8的最新稳定版:
- 升级
Appium.WebDriver、Selenium.WebDriver到最新版本 - 升级BrowserStack相关的包(比如
BrowserStack.Local、BrowserStack.TestAdapter)到适配.NET8的版本
很多时候这个问题是旧版本的客户端库没跟上.NET8的System.Text.Json源生成要求,升级后就能解决。
2. 替换默认的Json序列化器(绕过源生成限制)
如果暂时找不到兼容的依赖版本,可以手动配置使用默认的反射式Json序列化器,替代Selenium的源生成上下文:
// 初始化Appium选项时配置 var appiumOptions = new AppiumOptions(); // 添加你的设备、应用等配置... // 自定义Json序列化选项,使用默认解析器 appiumOptions.AddAdditionalCapability("jsonSerializerOptions", new JsonSerializerOptions { TypeInfoResolver = new DefaultJsonTypeInfoResolver(), PropertyNameCaseInsensitive = true // 保持和原有行为一致的配置 }); // 初始化Driver var driver = new AndroidDriver(new Uri("http://localhost:4723/wd/hub"), appiumOptions);
或者全局替换Selenium的默认序列化配置:
// 在项目启动时设置一次即可 OpenQA.Selenium.JsonCommandSerializer.DefaultOptions = new JsonSerializerOptions { TypeInfoResolver = new DefaultJsonTypeInfoResolver() };
3. 临时降级System.Text.Json包
如果是升级了Microsoft.Extensions.Json等NuGet包导致的冲突,可以尝试将其降级到与.NET7兼容的版本(比如6.0.x系列),不过这只是临时方案,优先推荐升级依赖库。
4. 检查自定义代码中的JsonElement使用
如果你的代码里有直接传递JsonElement类型的Capability或命令参数,建议将其转换为Dictionary<string, object>或dynamic类型,避免序列化时触发不支持的类型处理。
内容的提问来源于stack exchange,提问作者HANSTKE
相关产品推荐
相关产品推荐

