2013-12-03 3 views
1

Я пытаюсь десериализации следующего в C классы #:десериализация JSON список/массив классов C#

{ 
    "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" : "" 
    } 
} 

Я следующий до сих пор, но я получаю ошибку «не может десериализации текущего объекта JSON (например, { «name»: «value»}) в тип «Systems.Collections.Generic.List'1 [eko_app.Expenses + ExpensesResponse]», потому что для десериализации правильно нужен массив JSON (например, [1,2,3]) »

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; 
} 

Что мне делать, чтобы исправить это?

+0

Это «KeyValuePair». Вы можете использовать 'Dictionary ' для него. –

+0

Почему у вас пустой ключ?! –

+0

@ Joffrey Kern, мне просто прислали звонки Json Api, и это тот, с которым у меня проблемы. –

ответ

2

Я deserialized данные со следующими типами. Было свойство с пустым именем, оно должно иметь 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; } 
} 

Вы можете проверить, как ваши данные структурированы с Online JSON Viewer.

+0

Спасибо за ваш ответ. Все еще есть проблемы с этим. –

+0

@KinyanjuiKamau У вас все еще такая же ошибка? –

+0

Im получает нулевое значение для результата. Однако в jsonData = w.DownloadString (costsURL) ;, перед десриализацией я получаю действительные значения. –

Смежные вопросы