我有这个要返回的对象值,我想将其转换为可以检查和操作的有用的JSON对象。最终,我的目标是验证的价值观username和accessKey。但是有2件事情使这件事不起作用。Double {{使它成为无效的JSON,sauce:options并且不能转换为类中的属性。
{{
"browserName": "MicrosoftEdge",
"browserVersion": "latest",
"platformName": "Windows 10",
"sauce:options": {
"username": "test",
"accessKey": "123"
}
}}
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的:
string output = JsonConvert.SerializeObject(SauceSession.Options.ConfiguredEdgeOptions);
Run Code Online (Sandbox Code Playgroud)
这SauceSession.Options.ConfiguredEdgeOptions将返回我上面提到的那个对象。
回过头来: Newtonsoft.Json.JsonSerializationException:“从'OpenQA.Selenium.Edge.EdgeOptions'的'BinaryLocation'获取值时出错。”
我还根据建议尝试了此操作:
var serialized = JsonConvert.SerializeObject(SauceSession.Options.ConfiguredEdgeOptions);
Run Code Online (Sandbox Code Playgroud)
并返回此Newtonsoft.Json.JsonSerializationException:“从'OpenQA.Selenium.Edge.EdgeOptions'上的'BinaryLocation'获取值时出错。”
由于您无法修复源代码,因此您将必须使用凸出部分来修复JSON,例如,这将起作用:
var fixedJson = sourceJson.Substring(1, Json.Length - 2);
Run Code Online (Sandbox Code Playgroud)
现在您应该有几个类来保存数据,这样,您还可以处理不寻常的名称:
public class Root
{
public string BrowserName { get; set; }
public string BrowserVersion { get; set; }
public string PlatformName { get; set; }
[JsonProperty("sauce:options")]
public Options SauceOptions { get; set; }
}
public class Options
{
public string Username { get; set; }
public string AccessKey { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在您应该可以像这样反序列化了:
var root = JsonConvert.DeserializeObject<Root>(fixedJson);
Run Code Online (Sandbox Code Playgroud)