Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将此C#返回值序列化为JSON对象?_C# - Fatal编程技术网

如何将此C#返回值序列化为JSON对象?

如何将此C#返回值序列化为JSON对象?,c#,C#,我有一个返回的对象值,我想把它转换成一个有用的JSON对象,我可以检查和操作它。最终,我的目标是验证username和accessKey的值。但有两件事让这件事失去了意义。Double{使其成为无效的JSON,并且sauce:options无法转换为类中的属性 {{ "browserName": "MicrosoftEdge", "browserVersion": "latest", "platformName": "Windows 10", "sauce:options": {

我有一个返回的对象值,我想把它转换成一个有用的JSON对象,我可以检查和操作它。最终,我的目标是验证
username
accessKey
的值。但有两件事让这件事失去了意义。Double
{
使其成为无效的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.configuredGeoptions
返回我上面提到的对象

把这个拿回来: 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);
var root=JsonConvert.DeserializeObject(fixedJson);

由于无法修复源代码,因此必须应用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);
var root=JsonConvert.DeserializeObject(fixedJson);

这是…一个JSON字符串?您是如何“获取”的这些数据?您是否希望创建一个c#类来表示它?您是否在制作一个名称中包含
的属性时遇到了困难?有很多方法可以做到这一点。请缩小您的问题范围。包括您迄今为止尝试过的方法可以帮助您做到这一点。这是否回答了您的问题?这是一个JSON字符串?您是如何“获取”的这些数据?您是否希望创建一个c#类来表示它?您是否在制作一个名称中包含
的属性时遇到了困难?有很多方法可以做到这一点。请缩小您的问题范围。包括您迄今为止尝试的方法可以帮助您做到这一点。这是否回答了您的问题?感谢解决方案。我遇到了以下错误:Newtonsoft.Json.JsonSerializationException:'将值“browserName”转换为类型“SimpleSuceTests.Root.”路径“”,第2行,位置15'时出错。那么您的源Json没有双括号。请忘记将它们去掉。感谢解决方案。我收到以下错误:Newtonsoft.Json.JsonSerializationException:'转换值时出错“browserName”键入“SimpleSuceTests.Root”。路径“”,第2行,位置15。那么您的源JSON没有双括号。请忘记将它们去掉。