Я буду обманывать и создавать классы C# быстро с помощью этого инструмента: http://json2csharp.com/ (или только что обнаружили http://jsonclassgenerator.codeplex.com/)
Тогда я меняю 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);
}
Вот результат:
Берегитесь капитализации.
Если вы хотите использовать только младшие ключи 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\"}]}
или использовать один из этих решений, если вы действительно любите 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# собственности имен:
Прежде всего, я бы рекомендовал избегать тире в ключах JSON: «message-count» приведет к дополнительной работе. Используйте «message_count» – AFD
Привет AD, У меня нет контроля над этим. Это то, что я получаю с сервера. Мне удалось разобраться. Я просто неправильно использовал структуру классов при использовании JSON.Net. Похоже, что на это уходит довольно много времени. Почему у Microsoft нет разумного введения в JSON? – Welshboy
"message-count": "1"? – AFD