我有这个要返回的对象值,我想将它转换成我可以检查和操作的有用的 JSON 对象。最终,我的目标是验证 username
和 accessKey
的值。但是有两件事正在解决这个问题。双 {{
使其成为无效的 JSON 并且 sauce:options
无法转换为类中的属性。
{{
"browserName": "MicrosoftEdge",
"browserVersion": "latest",
"platformName": "Windows 10",
"sauce:options": {
"username": "test",
"accessKey": "123"
}
}}
这是我尝试过的:
string output = JsonConvert.SerializeObject(SauceSession.Options.ConfiguredEdgeOptions);
这个 SauceSession.Options.ConfiguredEdgeOptions
返回我上面提到的那个对象。
得到这个: Newtonsoft.Json.JsonSerializationException:“从‘OpenQA.Selenium.Edge.EdgeOptions’上的‘BinaryLocation’获取值时出错。”
我也按照建议尝试了这个:
var serialized = JsonConvert.SerializeObject(SauceSession.Options.ConfiguredEdgeOptions);
然后返回此 Newtonsoft.Json.JsonSerializationException:“从‘OpenQA.Selenium.Edge.EdgeOptions’上的‘BinaryLocation’获取值时出错。”
最佳答案
由于您无法修复源,因此您将不得不应用一个 bodge 来修复 JSON,例如这将起作用:
var fixedJson = sourceJson.Substring(1, Json.Length - 2);
现在你应该有几个类来保存你的数据,这样你也可以处理不寻常的名字:
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; }
}
现在你应该可以这样反序列化了:
var root = JsonConvert.DeserializeObject<Root>(fixedJson);
关于c# - 如何将此 C# 返回值序列化为 JSON 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59036532/