TechMaxy
TechMaxy

Reputation: 11

C# - Store JSON array string into SQL table

I am new to C#

Following is the JSON string I am getting from the web API.

I am trying to store the JSON string into a class and then store the JSON string into an SQL table.

But the C# code is failing to deserialize JSON into class. And the message box returns the null exception error.

JSON

{
   "Count":3,
   "data":[
      {
         "Cost1":{
            "amount":111,
            "currencyCode":"ABC"
         },
         "Cost2":{
            "amount":22.2,
            "currencyCode":"XYZ"
         },
         "Id":"007"
      },
      {
         "Cost1":{
            "amount":555,
            "currencyCode":"ABC"
         },
         "Cost2":{
            "amount":444,
            "currencyCode":"XYZ"
         },
         "Id":"008"
      },
      {
         "Cost1":{
            "amount":666,
            "currencyCode":"ABC"
         },
         "Cost2":{
            "amount":8882,
            "currencyCode":"XYZ"
         },
         "Id":"009"
      }
   ],
   "pending":[
      
   ],
   "@up":"Test Data"
}

C# Code

public class ParceJSN {
  public int Count {
    get;
    set;
  }
  public string data {
    get;
    set;
  }
  public string pending {
    get;
    set;
  }
  public string up {
    get;
    set;
  }
}

public void Main() {

  Task < string > task = MakeRequest(db_token); //Returns the JSON string

  var fr = task.Result;

  ParceJSN rst = JsonConvert.DeserializeObject < ParceJSN > (fr.ToString());

  MessageBox.Show(rst.TotalCount.ToString());

  Dts.TaskResult = (int) ScriptResults.Success;
}

Upvotes: 1

Views: 1930

Answers (1)

ShaneDemskie
ShaneDemskie

Reputation: 388

Your C# model is incorrect. Here's a really handy tool that I use when I need to generate C# classes based on some JSON - json2csharp.com

The correct class is:

public class Cost1    {
    public int amount { get; set; } 
    public string currencyCode { get; set; } 
}

public class Cost2    {
    public double amount { get; set; } 
    public string currencyCode { get; set; } 
}

public class Datum    {
    public Cost1 Cost1 { get; set; } 
    public Cost2 Cost2 { get; set; } 
    public string Id { get; set; } 
}

public class Root    {
    public int Count { get; set; } 
    public List<Datum> data { get; set; } 
    public List<object> pending { get; set; } 
    [JsonProperty("@up")]
    public string Up { get; set; } 
}

Now that you have the correct model, you can now do the following to deserialize your JSON string into a Root object which is defined above:

Root myDeserializedClass = JsonConvert.DeserializeObject<Root>(YOUR_JSON_STRING); 

Upvotes: 1

Related Questions