You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 18:22:10