Guilherme Almeida
Guilherme Almeida

Reputation: 89

Deserializing this JSON in C# with JSON.NET

Say I have the following JSON document:

{
    "table": [
        {
            "wiki": "http://en.wikipedia.org/wiki/Period%201%20element",
            "elements": [
                {
                    "group": "",
                    "position": 0,
                    "name": "Hydrogen",
                    "number": 1,
                    "small": "H",
                    "molar": 1.00794,
                    "electrons": [
                        1
                    ]
                },
                {
                    "group": "Element Noble p",
                    "position": 17,
                    "name": "Helium",
                    "number": 2,
                    "small": "He",
                    "molar": 4.002602,
                    "electrons": [
                        2
                    ]
                }
            ]
        },
        {
            "wiki": "http://en.wikipedia.org/wiki/Period%202%20element",
            "elements": [
                {
                    "group": "Element Alkali s",
                    "position": 0,
                    "name": "Lithium",
                    "number": 3,
                    "small": "Li",
                    "molar": 6.941,
                    "electrons": [
                        2,
                        1
                    ]
                },
                {
                    "group": "Element Alkaline s",
                    "position": 1,
                    "name": "Beryllium",
                    "number": 4,
                    "small": "Be",
                    "molar": 9.012182,
                    "electrons": [
                        2,
                        2
                    ]
                },
                {
                    "group": "Element Metalloid Boron p",
                    "position": 12,
                    "name": "Boron",
                    "number": 5,
                    "small": "B",
                    "molar": 10.811,
                    "electrons": [
                        2,
                        3
                    ]
                },
                {
                    "group": "Element Nonmetal Carbon p",
                    "position": 13,
                    "name": "Carbon",
                    "number": 6,
                    "small": "C",
                    "molar": 12.0107,
                    "electrons": [
                        2,
                        4
                    ]
                },
                {
                    "group": "Element Nonmetal Pnictogen p",
                    "position": 14,
                    "name": "Nitrogen",
                    "number": 7,
                    "small": "N",
                    "molar": 14.0067,
                    "electrons": [
                        2,
                        5
                    ]
                },
                {
                    "group": "Element Nonmetal Chalcogen p",
                    "position": 15,
                    "name": "Oxygen",
                    "number": 8,
                    "small": "O",
                    "molar": 15.9994,
                    "electrons": [
                        2,
                        6
                    ]
                },
                {
                    "group": "Element Halogen p",
                    "position": 16,
                    "name": "Fluorine",
                    "number": 9,
                    "small": "F",
                    "molar": 18.998404,
                    "electrons": [
                        2,
                        7
                    ]
                },
                {
                    "group": "Element Noble p",
                    "position": 17,
                    "name": "Neon",
                    "number": 10,
                    "small": "Ne",
                    "molar": 20.1797,
                    "electrons": [
                        2,
                        8
                    ]
                }
            ]
        }

... and it goes on and on...

How can I deserialize this JSON to a class called Element? You can ignore the "wiki" field if you wish.

What I have tried:

Table t = JsonConvert.DeserializeObject<Table> (lines);

class Table {
    public string wiki;
    public Element[] element;
}

class Element {
    public string group, name, small;
    public int position, numer;
    public double molar;
    public int[] electrons;
}

I can't get it to work.

Upvotes: 1

Views: 109

Answers (2)

Ivan Stoev
Ivan Stoev

Reputation: 205539

You have several typos in the class members, but the essential part is as follows:

Take a look at the beginning of your JSON document:

{
    "table": [

It essentially means that you need an object with array property called table.

The correct classes are:

class Root
{
    public Table[] table;
}

class Table
{
    public string wiki;
    public Element[] elements;
}

class Element
{
    public string group, name, small;
    public int position, number;
    public double molar;
    public int[] electrons;
}

and the deserialization code:

var root = JsonConvert.DeserializeObject<Root>(lines);

Upvotes: 2

yonisha
yonisha

Reputation: 3096

Parent = JsonConvert.DeserializeObject<Parent> (lines);

class Parent {
    public Mid[] table;
}

class Mid {
    public string wiki;
    public Element[] elements;
}

class Element {
    public string group, name, small;
    public int position, numer;
    public double molar;
    public int[] electrons;
}

Upvotes: 0

Related Questions