Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.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# C语言中反序列化嵌套JSON数组的问题_C#_Json_Json.net_Restsharp - Fatal编程技术网

C# C语言中反序列化嵌套JSON数组的问题

C# C语言中反序列化嵌套JSON数组的问题,c#,json,json.net,restsharp,C#,Json,Json.net,Restsharp,编辑 我注意到这得到了反对票,我想这是因为没有表现出研究的努力。 我看过很多堆栈溢出帖子。我找不到一个JSON嵌套如此之深的例子,它已经被访问过,并有例子说明存储在JSON中的数据后来是如何被操作的 问题与目标 使用restsharp,我收到了一个对API调用的JSON响应,但是我正在努力反序列化得到的响应。我要使用的数据似乎是下面的嵌套数组 我的目标是将该数组的内容传递给一个变量,检查它是否已填充,获取该数组的第一项,然后将该项中的属性设置为与数据库中的对象相等 这是我用当前代码收到的错误消息

编辑 我注意到这得到了反对票,我想这是因为没有表现出研究的努力。 我看过很多堆栈溢出帖子。我找不到一个JSON嵌套如此之深的例子,它已经被访问过,并有例子说明存储在JSON中的数据后来是如何被操作的

问题与目标 使用restsharp,我收到了一个对API调用的JSON响应,但是我正在努力反序列化得到的响应。我要使用的数据似乎是下面的嵌套数组

我的目标是将该数组的内容传递给一个变量,检查它是否已填充,获取该数组的第一项,然后将该项中的属性设置为与数据库中的对象相等

这是我用当前代码收到的错误消息。看起来我把命中的对象当作了错误的对象类型,但是在我的头撞到墙上几个小时后,我不完全确定为什么这个JSON结构不起作用

现行代码 我的模型是用json2charp创建的
反序列化程序需要一个JSON数组。JSON是一个包含JSON数组的JSON对象。反序列化程序不可能知道您希望它使用hits数组开始工作

您需要反序列化为RootObject。然后,您可以将列表作为结果的属性引用

更新:

下面的代码应该能让您理解我的意思。我对它进行了测试,它适用于我,使用您的对象和JSON

var sr = new StreamReader(@"C:\Users\danielc\Documents\Visual Studio 2012\Projects\TestJSON\TestJSON\response.json");
string json = sr.ReadToEnd();
sr.Close();

var root = JsonConvert.DeserializeObject<RootObject>(json);
var result = root.result;
var hits = result.hits;

if (hits.Any())
{
    var address = hits.FirstOrDefault();
    var udprn = string.Format("UDPRN: {0}", address.udprn);
    Console.WriteLine(udprn);
}

Console.Read();

您没有使用您的RootObject,并且您的RootObject没有使用您的结果。您发布的JSON无效:@DanielC抱歉,这是一个复制粘贴错误,我已在原始帖子中更新了JSON。它确实验证了,@Jeroenvanevel,你能进一步阐述你的意思吗。我在模型中看到从根对象到结果和从结果到命中的引用。我应该尝试反序列化结果,然后访问Hit吗?嘿@DanielC,这真的很有帮助。根对象模型的这一部分是否不引用结果对象?公共结果结果{get;set;}Jaysus您是对的,它确实如此。我已经修改了我的评论。谢谢@Daniel,我现在就试试看。如果我有足够的声望点,我会投票给你。@ArranFrance好吧,你可以做的是选择一个复选标记,表明这是有效的。感谢Daniel C的编辑和一些睡眠,我今天早上很容易就做到了。Danciel C的代码中显示的技巧是对上面提到的根对象进行反序列化,然后将下一个嵌套对象作为var传递,并继续递归,直到到达所需的类!
 {
    "result": {
        "total": 2,
        "limit": 10,
        "page": 0,
        "hits": [
            {
                "dependant_locality": "",
                "postcode_type": "L",
                "po_box": "",
                "post_town": "LONDON",
                "delivery_point_suffix": "1A",
                "double_dependant_locality": "",
                "su_organisation_indicator": " ",
                "longitude": -0.127695242183412,
                "department_name": "",
                "district": "Westminster",
                "building_name": "",
                "dependant_thoroughfare": "",
                "northings": 179951,
                "premise": "10",
                "postcode_outward": "SW1A",
                "postcode_inward": "2AA",
                "sub_building_name": "",
                "eastings": 530047,
                "postcode": "SW1A 2AA",
                "country": "England",
                "udprn": 23747771,
                "line_3": "",
                "organisation_name": "Prime Minister & First Lord Of The Treasury",
                "ward": "St James's",
                "county": "",
                "line_1": "Prime Minister & First Lord Of The Treasury",
                "building_number": "10",
                "thoroughfare": "Downing Street",
                "line_2": "10 Downing Street",
                "latitude": 51.5035398826274
            },
            {
                "dependant_locality": "",
                "postcode_type": "S",
                "po_box": "",
                "post_town": "LONDON",
                "delivery_point_suffix": "1B",
                "double_dependant_locality": "",
                "su_organisation_indicator": " ",
                "longitude": -0.122624730080001,
                "department_name": "",
                "district": "Camden",
                "building_name": "Downing Court",
                "dependant_thoroughfare": "",
                "northings": 182178,
                "premise": "Flat 10, Downing Court",
                "postcode_outward": "WC1N",
                "postcode_inward": "1LX",
                "sub_building_name": "Flat 10",
                "eastings": 530342,
                "postcode": "WC1N 1LX",
                "country": "England",
                "udprn": 26245117,
                "line_3": "Grenville Street",
                "organisation_name": "",
                "ward": "Bloomsbury",
                "county": "",
                "line_1": "Flat 10",
                "building_number": " ",
                "thoroughfare": "Grenville Street",
                "line_2": "Downing Court",
                "latitude": 51.5234851731108
            }
        ]
    },
    "code": 2000,
    "message": "Success"
}
public class Hit
{
    public string dependant_locality { get; set; }
    public string postcode_type { get; set; }
    public string po_box { get; set; }
    public string post_town { get; set; }
    public string delivery_point_suffix { get; set; }
    public string double_dependant_locality { get; set; }
    public string su_organisation_indicator { get; set; }
    public double longitude { get; set; }
    public string department_name { get; set; }
    public string district { get; set; }
    public string building_name { get; set; }
    public string dependant_thoroughfare { get; set; }
    public int northings { get; set; }
    public string premise { get; set; }
    public string postcode_outward { get; set; }
    public string postcode_inward { get; set; }
    public string sub_building_name { get; set; }
    public int eastings { get; set; }
    public string postcode { get; set; }
    public string country { get; set; }
    public int udprn { get; set; }
    public string line_3 { get; set; }
    public string organisation_name { get; set; }
    public string ward { get; set; }
    public string county { get; set; }
    public string line_1 { get; set; }
    public string building_number { get; set; }
    public string thoroughfare { get; set; }
    public string line_2 { get; set; }
    public double latitude { get; set; }
}

public class Result
{
    public int total { get; set; }
    public int limit { get; set; }
    public int page { get; set; }
    public List<Hit> hits { get; set; }
}

public class RootObject
{
    public Result result { get; set; }
    public int code { get; set; }
    public string message { get; set; }
}
var sr = new StreamReader(@"C:\Users\danielc\Documents\Visual Studio 2012\Projects\TestJSON\TestJSON\response.json");
string json = sr.ReadToEnd();
sr.Close();

var root = JsonConvert.DeserializeObject<RootObject>(json);
var result = root.result;
var hits = result.hits;

if (hits.Any())
{
    var address = hits.FirstOrDefault();
    var udprn = string.Format("UDPRN: {0}", address.udprn);
    Console.WriteLine(udprn);
}

Console.Read();