简体   繁体   中英

Deserializing JSON list/array to C# classes

I am trying to deserialize the following into C# classes:

{
    "response" : {
        "" : {
            "Expense" : [[{
                        "chart_of_accounts_id" : "45f2fd8f-68b2-44cc-b07ac031c97cd96c",
                        "account_name" : "Salaries",
                        "amount" : "1500.00",
                        "entry_type" : "Debit",
                        "business_id" : "528f00bb-8cd8-4e7f-be6a-0724c327a7be",
                        "account_category" : "5"
                    }, {
                        "chart_of_accounts_id" : "45f2fd8f-68b2-44cc-b07ac031c97cd96c",
                        "account_name" : "Salaries",
                        "amount" : "200.00",
                        "entry_type" : "Debit",
                        "business_id" : "528f00bb-8cd8-4e7f-be6a-0724c327a7be",
                        "account_category" : "5"
                    }
                ]]
        }
    },
    "messages" : {
        "msgs" : "",
        "errs" : ""
    }
}

I have the following so far but I get the error "cannot deserialize the current JSON object (eg {"name":"value"}) into type 'Systems.Collections.Generic.List'1[eko_app.Expenses+ExpensesResponse]' because it requires a JSON array (eg [1,2,3]) to deserialize correctly"

public class Expense
{
    public string chart_of_accounts_id { get; set; }
    public string account_name { get; set; }
    public decimal amount { get; set; }
    public string entry_type { get; set; }
    public string business_id { get; set; }
    public int account_category { get; set; }
}

public class ExpensesResponse
{
    public List<Expense> Expense { get; set; }
}

public class Messages
{
    public string msgs { get; set; }
    public string errs { get; set; }
}

public class RootObject
{
    public List<ExpensesResponse> response { get; set; }
    public Messages messages { get; set; }
}

// deserialize the json to c# .net
var response = Newtonsoft.Json.JsonConvert.DeserializeObject<RootObject>(jsonData);

if (response != null)
{
          expenses = response.response;
}

What should I do to correct this?

I have deserialized the data with following types. There was a property with empty name, it should have JsonPropertyAttribute .

public class Expense
{
    public string chart_of_accounts_id { get; set; }
    public string account_name { get; set; }
    public decimal amount { get; set; }
    public string entry_type { get; set; }
    public string business_id { get; set; }
    public int account_category { get; set; }
}

public class ExpensesResponse
{
    [JsonProperty(PropertyName = "")] 
    public ExpensesResponseContent Content { get; set; }
}

public class ExpensesResponseContent
{
    public List<List<Expense>> Expense { get; set; }

}

public class Messages
{
    public string msgs { get; set; }
    public string errs { get; set; }
}

public class RootObject
{
    public ExpensesResponse response { get; set; }
    public Messages messages { get; set; }
}

You can check how your data is structured with Online JSON Viewer .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM