1

I'm trying to deserialize an Object Array from an API service.

The data from the API has the following form:

{
"id": "9286",
"nome": "Bairro Novo",
"num_lotes": "312",
"num_quadras": "9",
"plots_id": "159351",
"geo_data": [
  {
    "loteamentos_id": "9286",
    "G": "-7.27087569384820000000",
    "K": "-34.90980863571200000000",
    "index": "0",
    "code": "V"
  },
  {
    "loteamentos_id": "9286",
    "G": "-7.27234968660550000000",
    "K": "-34.90971207618700000000",
    "index": "1",
    "code": "V"
  },
  {
    "loteamentos_id": "9286",
    "G": "-7.27317448188540000000",
    "K": "-34.90458905696900000000",
    "index": "2",
    "code": "V"
  },
  {
    "loteamentos_id": "9286",
    "G": "-7.27176434710060000000",
    "K": "-34.90472316741900000000",
    "index": "3",
    "code": "V"
  },
  {
    "loteamentos_id": "9286",
    "G": "-7.27202508786680000000",
    "K": "-34.90719884634000000000",
    "index": "15",
    "code": "C"
  }
]
  },

The class Loteamento:

public class Loteamento {

    [JsonProperty("id")]
    public string id { get; set; }

    [JsonProperty("nome")]
    public string nome { get; set; }

    [JsonProperty("num_lotes")]
    public string num_lotes { get; set; }

    [JsonProperty("num_quadras")]
    public string num_quadras { get; set; }

    [JsonProperty("plots_id")]
    public string plots_id { get; set; }

    [JsonProperty("geo_data")]
    public List<GeoData> geo_data { get; set; }

}

And the class GeoData:

 public class GeoData {

    [JsonProperty("loteamentos_id")]
    public string loteamentos_id { get; set; }

    [JsonProperty("G")]
    public string G { get; set; }

    [JsonProperty("K")]
    public string K { get; set; }

    [JsonProperty("index")]
    public string index { get; set; }

    [JsonProperty("code")]
    public string code { get; set; }

}

The question is that I get an error and do not know how to get an Array.

In my code I have:

List<Loteamento>[] loteamentos = null;
loteamentos = JsonConvert.DeserializeObject<List<Loteamento>>(dataObj.Result);

What's wrong?

3
  • 3
    "I get an error"... What error? Commented Jun 13, 2016 at 10:00
  • Also, why are yo trying to assign a list to a array of lists? Commented Jun 13, 2016 at 10:00
  • @PatrickHofman Upsss! You are right. That was the problem! Thanks. Commented Jun 13, 2016 at 10:06

2 Answers 2

1
List<Loteamento>[] loteamentos = null;
loteamentos = JsonConvert.DeserializeObject<List<Loteamento>>(dataObj.Result);

Your first line declares loteamentos as an array, where each cell in the array is a List<Loteamento>. So this variable is set up to hold multiple instances of the type List<Loteamento>.

Your second line then deserialises a single instance of List<Loteamento> and then tries to assign this into the loteamentos variable. The variable is unsuitable as it is an array of lists, not just a list.

I suspect it may work if you simply remove the [] from your first line.

Sign up to request clarification or add additional context in comments.

Comments

0

Using Newtonsoft Json.Net you can deserialize it like this:

void Main()
{
    string json = @"{
        ""id"": ""9286"",
""nome"": ""Bairro Novo"",
""num_lotes"": ""312"",
""num_quadras"": ""9"",
""plots_id"": ""159351"",
""geo_data"": [
  {
    ""loteamentos_id"": ""9286"",
    ""G"": ""-7.27087569384820000000"",
    ""K"": ""-34.90980863571200000000"",
    ""index"": ""0"",
    ""code"": ""V""
  },
  {
    ""loteamentos_id"": ""9286"",
    ""G"": ""-7.27234968660550000000"",
    ""K"": ""-34.90971207618700000000"",
    ""index"": ""1"",
    ""code"": ""V""
  },
  {
    ""loteamentos_id"": ""9286"",
    ""G"": ""-7.27317448188540000000"",
    ""K"": ""-34.90458905696900000000"",
    ""index"": ""2"",
    ""code"": ""V""
  },
  {
    ""loteamentos_id"": ""9286"",
    ""G"": ""-7.27176434710060000000"",
    ""K"": ""-34.90472316741900000000"",
    ""index"": ""3"",
    ""code"": ""V""
  },
  {
    ""loteamentos_id"": ""9286"",
    ""G"": ""-7.27202508786680000000"",
    ""K"": ""-34.90719884634000000000"",
    ""index"": ""15"",
    ""code"": ""C""
  }
]
  }";

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

public class GeoData
{
    public string loteamentos_id { get; set; }
    public string G { get; set; }
    public string K { get; set; }
    public string index { get; set; }
    public string code { get; set; }
}

public class RootObject
{
    public string id { get; set; }
    public string nome { get; set; }
    public string num_lotes { get; set; }
    public string num_quadras { get; set; }
    public string plots_id { get; set; }
    public List<GeoData> geo_data { get; set; }
}

Note: Classes are created from sample Json on http://json2csharp.com

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.