0

With my code below I am able to get the value of:

{
  "101": [
    {
      "name": "Lane 2",
      "code": 21
    },
    {
      "name": "Lane 4",
      "code": 41
    },
    {
      "name": "Lane 6",
      "code": 61
    },
    {
      "name": "Lane 8",
      "code": 81
    },
    {
      "name": "Lane 9",
      "code": 91
    },
    {
      "name": "Lane 11",
      "code": 111
    }
  ],
  "103": [
     {
      "name": "Lane 3",
      "code": 31
    },
    {
      "name": "Lane 6",
      "code": 61
    }
  ],
  "105": [
     {
      "name": "Lane 6",
      "code": 61
    },
    {
      "name": "Lane 9",
      "code": 91
    }
  ],
  "107": [
     {
      "name": "Lane 3",
      "code": 31
    },
    {
      "name": "Lane 5",
      "code": 51
    }
  ],
  "109": [
     {
      "name": "Lane 3",
      "code": 31
    },
    {
      "name": "Lane 5",
      "code": 61
    }
  ],
  "111": [
     {
      "name": "Lane 2",
      "code": 21
    },
    {
      "name": "Lane 4",
      "code": 41
    },
    {
      "name": "Lane 6",
      "code": 61
    }
  ],
  "113": [
     {
      "name": "Lane 4",
      "code": 41
    },
    {
      "name": "Lane 6",
      "code": 61
    },
    {
      "name": "Lane 8",
      "code": 81
    },
    {
      "name": "Lane 9",
      "code": 91
    }
  ],
  "115": [
     {
      "name": "Lane 3",
      "code": 31
    },
    {
      "name": "Lane 5",
      "code": 51
    }
  ],
  "117": [
     {
      "name": "Lane 3",
      "code": 31
    },
    {
      "name": "Lane 4",
      "code": 41
    },
    {
      "name": "Lane 6",
      "code": 61
    }
  ]
}

What I need is to be able to select through the json file for a certain value then get its children. Example when I send "101" I should be able to get:

    {
      "name": "Lane 2",
      "code": 21
    },
    {
      "name": "Lane 4",
      "code": 41
    },
    {
      "name": "Lane 6",
      "code": 61
    },
    {
      "name": "Lane 8",
      "code": 81
    },
    {
      "name": "Lane 9",
      "code": 91
    },
    {
      "name": "Lane 11",
      "code": 111
    }

and place it on a class. This is my code so far:

Lane.json

{
  "101": [
    {
      "name": "Lane 2",
      "code": 21
    }
    {
      "name": "Lane 4",
      "code": 41
    },
    {
      "name": "Lane 6",
      "code": 61
    },
    {
      "name": "Lane 8",
      "code": 81
    },
    {
      "name": "Lane 9",
      "code": 91
    },
    {
      "name": "Lane 11",
      "code": 111
    }
  ],
  "103": [
     {
      "name": "Lane 3",
      "code": 31
    },
    {
      "name": "Lane 6",
      "code": 61
    }
  ],
  "105": [
     {
      "name": "Lane 6",
      "code": 61
    },
    {
      "name": "Lane 9",
      "code": 91
    }
  ],
  "107": [
     {
      "name": "Lane 3",
      "code": 31
    },
    {
      "name": "Lane 5",
      "code": 51
    }
  ],
  "109": [
     {
      "name": "Lane 3",
      "code": 31
    },
    {
      "name": "Lane 5",
      "code": 61
    }
  ],
  "111": [
     {
      "name": "Lane 2",
      "code": 21
    },
    {
      "name": "Lane 4",
      "code": 41
    },
    {
      "name": "Lane 6",
      "code": 61
    }
  ],
  "113": [
     {
      "name": "Lane 4",
      "code": 41
    },
    {
      "name": "Lane 6",
      "code": 61
    },
    {
      "name": "Lane 8",
      "code": 81
    },
    {
      "name": "Lane 9",
      "code": 91
    }
  ],
  "115": [
     {
      "name": "Lane 3",
      "code": 31
    },
    {
      "name": "Lane 5",
      "code": 51
    }
  ],
  "117": [
     {
      "name": "Lane 3",
      "code": 31
    },
    {
      "name": "Lane 4",
      "code": 41
    },
    {
      "name": "Lane 6",
      "code": 61
    }
  ]
}

Lane.cs

class Lane
{
    public string name { get; set; }
    public int code { get; set; }
}

class LaneContainer
{
    public List<Lane> Lane { get; set; }
}

This is how I get the values

private void cbPlaza_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    Plaza selected = (Plaza)cbPlaza.SelectedValue;

    string fileName = "Lane.json";
    string path = System.IO.Path.Combine(Environment.CurrentDirectory, @"Data\", fileName);
    var json = File.ReadAllText(path);

    LaneContainer laneContainer = JsonConvert.DeserializeObject<LaneContainer>(File.ReadAllText(json));
}

I get an error like so:

Additional information: After parsing a value an unexpected character was encountered: {. Path '101[0]', line 7, position 4.

Can you please help me with this. Thank you.

kara
  • 3,205
  • 4
  • 20
  • 34
Ibanez1408
  • 4,550
  • 10
  • 59
  • 110

2 Answers2

2

You are missing a comma and your structure is a Dictionary<string,List<Lane>>

  class Lane
  {
     public string name { get; set; }
     public int code { get; set; }
  }

Example

To get 101

var json = File.ReadAllText(path);

var lanes = JsonConvert.DeserializeObject<Dictionary<string, List<Lane>>>(json);
var results = lanes["101"];
TheGeneral
  • 79,002
  • 9
  • 103
  • 141
1

You can deserialize to Dictionary<int, Node[]> like below and get the specific key you want

Dictionary<int, Node[]> myDict = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<int, Node[]>>(json);
var data = myDict[100];

Where Node

public class Node
{
    public int Code { get; set; }
    public string Name { get; set; }
}
Rahul
  • 76,197
  • 13
  • 71
  • 125