2013-07-30 104 views
1

任何人都可以幫助我解析這個JSON到C#4.0中的對象。我花了兩天的時間嘗試。
我有JSON.NET和其他幾個人的建議無濟於事。解析C#4.0中的JSON

我認爲這將是最好的只是給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和調用結構相同的對象。

JsonConvert.DeserializeObject<Entity>(json); 

編輯。如果你想這樣做,你必須使用JSON.NET。

+0

謝謝譚。這就是我所做的。 – 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只是我所做的一個名稱,代表您傳遞給C#的JSON對象。

我從客戶端傳遞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

,或者如果你真的喜歡駝峯規則使用這些解決方案之一:

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

令人印象深刻的答案!這就像一個博客條目。 –