Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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#_Arrays_Json - Fatal编程技术网

C# 如何反序列化json对象的特定键?

C# 如何反序列化json对象的特定键?,c#,arrays,json,C#,Arrays,Json,输入JSON文件: { "@version": "2.7.0", "@generated": "Wed, 30 May 2018 17:23:14", "site": { "@name": "http://google.com", "@host": "google.com", "@port": "80", "@ssl": "false", "alerts": [ {

输入JSON文件:

{
    "@version": "2.7.0",
    "@generated": "Wed, 30 May 2018 17:23:14",
    "site": {
        "@name": "http://google.com",
        "@host": "google.com",
        "@port": "80",
        "@ssl": "false",
        "alerts": [
            {

                "alert": "X-Content-Type-Options Header Missing",
                "name": "X-Content-Type-Options Header Missing",
                "riskcode": "1",
                "confidence": "2",
                "riskdesc": "Low (Medium)",
                "desc": "<p>The Anti-MIME-Sniffing header X-Content-Type-Options was not set to 'nosniff'. This allows older versions of Internet Explorer and Chrome to perform MIME-sniffing on the response body, potentially causing the response body to be interpreted and displayed as a content type other than the declared content type. Current (early 2014) and legacy versions of Firefox will use the declared content type (if one is set), rather than performing MIME-sniffing.</p>",
                "instances": [
                    {
                        "uri": "http://google.com",
                        "method": "GET",
                        "param": "X-Content-Type-Options"
                    }
                ],          
                "wascid": "15",
                "sourceid": "3"
            }

        ]
    }
}

我想获取json对象的特定键,并在alert对象中对其进行反序列化。

最简单的方法是使用足够的键声明外部对象,以达到您关心的键:

public class Alert
{
    public string alert;
    public string riskcode;
}

public class SiteAlerts
{
    public Site site { get; set; }
}

public class Site
{
    public List<Alert> alerts { get; } = new List<Alert>();
}
公共类警报
{
公共字符串警报;
公共字符串代码;
}
公共类站点警报
{
公共站点站点{get;set;}
}
公共类网站
{
公共列表警报{get;}=new List();
}
然后,您可以简单地使用以下命令反序列化:

var siteAlerts = JsonConvert.DeserializeObject<SiteAlerts>(json);
var alerts = siteAlerts.site.alerts; // no error-checking here
var siteAlerts=JsonConvert.DeserializeObject(json);
var alerts=sitearts.site.alerts;//在这里检查没有错误

最简单的方法是只声明具有足够键的外部对象,以到达您关心的键:

public class Alert
{
    public string alert;
    public string riskcode;
}

public class SiteAlerts
{
    public Site site { get; set; }
}

public class Site
{
    public List<Alert> alerts { get; } = new List<Alert>();
}
公共类警报
{
公共字符串警报;
公共字符串代码;
}
公共类站点警报
{
公共站点站点{get;set;}
}
公共类网站
{
公共列表警报{get;}=new List();
}
然后,您可以简单地使用以下命令反序列化:

var siteAlerts = JsonConvert.DeserializeObject<SiteAlerts>(json);
var alerts = siteAlerts.site.alerts; // no error-checking here
var siteAlerts=JsonConvert.DeserializeObject(json);
var alerts=sitearts.site.alerts;//在这里检查没有错误
我建议您使用库来简化json数据的反序列化

如果您希望部分反序列化,例如,仅将
警报
属性反序列化到您的类
警报
,而不创建所需的整个类结构

您可以使用以下代码:

JObject jObject = JObject.Parse(json);
var alerts = jObject["site"]["alerts"].ToObject<Alert[]>();
foreach(var item in alerts)
{
    Console.WriteLine("alert: " + item.alert);  
    Console.WriteLine("riskcode: " + item.riskcode);
}
JObject-JObject=JObject.Parse(json);
var alerts=jObject[“site”][“alerts”].ToObject.

我建议您使用库来简化json数据的反序列化

如果您希望部分反序列化,例如,仅将
警报
属性反序列化到您的类
警报
,而不创建所需的整个类结构

您可以使用以下代码:

JObject jObject = JObject.Parse(json);
var alerts = jObject["site"]["alerts"].ToObject<Alert[]>();
foreach(var item in alerts)
{
    Console.WriteLine("alert: " + item.alert);  
    Console.WriteLine("riskcode: " + item.riskcode);
}
JObject-JObject=JObject.Parse(json);
var alerts=jObject[“site”][“alerts”]。ToObject.

简短版本

var siteAlerts = JsonConvert.DeserializeObject<dynamic>(json).site.alerts.ToObject<Alert[]>();
var siteAlerts=JsonConvert.DeserializeObject(json.site.alerts.ToObject();
短版

var siteAlerts = JsonConvert.DeserializeObject<dynamic>(json).site.alerts.ToObject<Alert[]>();
var siteAlerts=JsonConvert.DeserializeObject(json.site.alerts.ToObject();

您已经尝试了什么?是否要跳到
的“警报”:[…]
部分并避开外部对象?基本上,您应该创建空包装类型,其中只包含访问该键所需的键。uou是否使用json.net库?您已经尝试了什么?是否要跳到
“警报”:[…]
部分并避免使用外部对象?基本上,您应该创建空包装类型,其中只包含访问该键所需的键。uou是否使用json.net库?