2013-07-30 2 views
1

Может ли кто-нибудь помочь мне разобрать этот JSON в объект IN C# 4.0. Я пробовал последние два дня.
У меня есть JSON.NET и несколько других предложений людей безрезультатно.Разбор JSON в C# 4.0

Я думал, что лучше всего дать образец JSON и попросить ваши предложения.

{ 
"message-count":"1", 
"messages":[ 
     {"to":"441234567890", 
      "messageprice":"0.02900000", 
      "status":"0", 
      "messageid":"030000001DFE2CB1", 
      "remainingbalance":"1.56500000", 
         "network":"23433"} 
       ] 
} 

Большое спасибо, Адриан

p.s Их некоторый хороший код здесь, если вы хотите использовать GitHub. https://github.com/lukesampson/HastyAPI.Nexmo

+0

Прежде всего, я бы рекомендовал избегать тире в ключах JSON: «message-count» приведет к дополнительной работе. Используйте «message_count» – AFD

+0

Привет AD, У меня нет контроля над этим. Это то, что я получаю с сервера. Мне удалось разобраться. Я просто неправильно использовал структуру классов при использовании JSON.Net. Похоже, что на это уходит довольно много времени. Почему у Microsoft нет разумного введения в JSON? – Welshboy

+0

"message-count": "1"? – AFD

ответ

0

Создайте объекты с той же структурой, что и json и call.

JsonConvert.DeserializeObject<Entity>(json); 

Редактировать. Вы должны использовать JSON.NET, если вы хотите сделать это таким образом.

+0

Спасибо Tan. Это то, что я сделал. – Welshboy

2

Я буду обманывать и создавать классы C# быстро с помощью этого инструмента: http://json2csharp.com/ (или только что обнаружили http://jsonclassgenerator.codeplex.com/)

enter image description here

Тогда я меняю C классы # по своему вкусу

public class MessagesJSON 
{ 
    public int MessageCount { get; set; } 
    public List<Message> Messages { get; set; } 
} 

public class Message 
{ 
    public string To { get; set; } 
    public double MessagePrice { get; set; } 
    public int Status { get; set; } 
    public string MessageId { get; set; } 
    public double RemainingBalance { get; set; } 
    public string Network { get; set; } 
} 

MessagesJSON это просто имя, которое я сделал, который представляет объект JSON, который вы передаете на C#.

Я передаю строку JSON от клиента, например.

{\"MessageCount\":1,\"Messages\":[{\"To\":\"441234567890\",\"MessagePrice\":0.029,\"Status\":0,\"MessageId\":\"030000001DFE2CB1\",\"RemainingBalance\":1.565,\"Network\":\"23433\"}] 

Тогда я могу использовать Json.NET для преобразования JSON в объекты C#:

public void YourMethod(MessagesJSON json) { 
    var result = JsonConvert.DeserializeObject<MessagesJSON>(json); 
} 

Вот результат:

enter image description here

Берегитесь капитализации.

Если вы хотите использовать только младшие ключи JSON, замените классы C# на нижний регистр, например.public double messageprice {get; задавать; }

C классы #:

public class MessagesJSON 
    { 
     public int message_count { get; set; } 
     public List<Message> messages { get; set; } 
    } 

public class Message 
{ 
    public string to { get; set; } 
    public string messageprice { get; set; } 
    public string status { get; set; } 
    public string messageid { get; set; } 
    public string remainingbalance { get; set; } 
    public string network { get; set; } 
} 

Это как можно ближе к JSON, как вы хотите:

{\"message_count\":1,\"messages\":[{\"to\":\"441234567890\",\"messageprice\":\"0.02900000\",\"status\":\"0\",\"messageid\":\"030000001DFE2CB1\",\"remainingbalance\":\"1.56500000\",\"network\":\"23433\"}]} 

enter image description here

или использовать один из этих решений, если вы действительно любите CamelCasing :

CamelCase only if PropertyName not explicitly set in Json.Net?

JObject & CamelCase conversion with JSON.Net

Я сам предпочитаю атрибуты

public class Message 
    { 
     [JsonProperty("to")] 
     public string To { get; set; } 

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

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

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

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

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

Проденьте строку:

"{\"message_count\":1,\"messages\":[{\"to\":\"441234567890\",\"messageprice\":\"0.02900000\",\"status\":\"0\",\"messageid\":\"030000001DFE2CB1\",\"remainingbalance\":\"1.56500000\",\"network\":\"23433\"}]}" 

но получить довольно C# собственности имен:

enter image description here

+0

Привет, Именно это я и сделал. Большое спасибо. – Welshboy

+0

Впечатляюще подробный ответ! Это читается как запись в блоге. –