2016-08-30 54 views
1

我想反序列化由Telegram Bot API收到的JSON響應的getUpdate()方法。反序列化json數據c#

JSON數據:

{ 
    "ok": true, 
    "result": [ 
    { 
     "update_id": 920493886, 
     "message": { 
     "message_id": 123, 
     "from": { 
      "id": 219633031, 
      "first_name": "Shreeeeeee", 
      "username": "Winner7777" 
     }, 
     "chat": { 
      "id": 219633031, 
      "first_name": "Shreeeeeee", 
      "username": "Winner7777", 
      "type": "private" 
     }, 
     "date": 1472457375, 
     "text": "Aata aala" 
     } 
    }, 
    { 
     "update_id": 920493887, 
     "message": { 
     "message_id": 124, 
     "from": { 
      "id": 219633031, 
      "first_name": "Shreeeeeee", 
      "username": "Winner7777" 
     }, 
     "chat": { 
      "id": 219633031, 
      "first_name": "Shreeeeeee", 
      "username": "Winner7777", 
      "type": "private" 
     }, 
     "date": 1472457387, 
     "text": "Jeva tuzyakadun reply aala tevha" 
     } 
    }, 
    { 
     "update_id": 920493888, 
     "message": { 
     "message_id": 125, 
     "from": { 
      "id": 219633031, 
      "first_name": "Shreeeeeee", 
      "username": "Winner7777" 
     }, 
     "chat": { 
      "id": 219633031, 
      "first_name": "Shreeeeeee", 
      "username": "Winner7777", 
      "type": "private" 
     }, 
     "date": 1472457443, 
     "text": "Deposite" 
     } 
    }, 
    { 
     "update_id": 920493889, 
     "message": { 
     "message_id": 127, 
     "from": { 
      "id": 201520743, 
      "first_name": "Chandrakant", 
      "last_name": "Kumathekar", 
      "username": "chandrakant_k" 
     }, 
     "chat": { 
      "id": 201520743, 
      "first_name": "Chandrakant", 
      "last_name": "Kumathekar", 
      "username": "chandrakant_k", 
      "type": "private" 
     }, 
     "date": 1472457645, 
     "text": "\/menu", 
     "entities": [ 
      { 
      "type": "bot_command", 
      "offset": 0, 
      "length": 5 
      } 
     ] 
     } 
    }, 
    { 
     "update_id": 920493890, 
     "message": { 
     "message_id": 128, 
     "from": { 
      "id": 219633031, 
      "first_name": "Shreeeeeee", 
      "username": "Winner7777" 
     }, 
     "chat": { 
      "id": 219633031, 
      "first_name": "Shreeeeeee", 
      "username": "Winner7777", 
      "type": "private" 
     }, 
     "date": 1472457670, 
     "text": "\/menu", 
     "entities": [ 
      { 
      "type": "bot_command", 
      "offset": 0, 
      "length": 5 
      } 
     ] 
     } 
    }, 
    { 
     "update_id": 920493891, 
     "message": { 
     "message_id": 130, 
     "from": { 
      "id": 201520743, 
      "first_name": "Chandrakant", 
      "last_name": "Kumathekar", 
      "username": "chandrakant_k" 
     }, 
     "chat": { 
      "id": 201520743, 
      "first_name": "Chandrakant", 
      "last_name": "Kumathekar", 
      "username": "chandrakant_k", 
      "type": "private" 
     }, 
     "date": 1472457848, 
     "text": "Deposite" 
     } 
    }, 
    { 
     "update_id": 920493892, 
     "message": { 
     "message_id": 132, 
     "from": { 
      "id": 201520743, 
      "first_name": "Chandrakant", 
      "last_name": "Kumathekar", 
      "username": "chandrakant_k" 
     }, 
     "chat": { 
      "id": 201520743, 
      "first_name": "Chandrakant", 
      "last_name": "Kumathekar", 
      "username": "chandrakant_k", 
      "type": "private" 
     }, 
     "date": 1472457883, 
     "text": "Deposite" 
     } 
    }, 
    { 
     "update_id": 920493893, 
     "message": { 
     "message_id": 133, 
     "from": { 
      "id": 219633031, 
      "first_name": "Shreeeeeee", 
      "username": "Winner7777" 
     }, 
     "chat": { 
      "id": 219633031, 
      "first_name": "Shreeeeeee", 
      "username": "Winner7777", 
      "type": "private" 
     }, 
     "date": 1472468407, 
     "text": "\/menu", 
     "entities": [ 
      { 
      "type": "bot_command", 
      "offset": 0, 
      "length": 5 
      } 
     ] 
     } 
    }, 
    { 
     "update_id": 920493894, 
     "message": { 
     "message_id": 134, 
     "from": { 
      "id": 219633031, 
      "first_name": "Shreeeeeee", 
      "username": "Winner7777" 
     }, 
     "chat": { 
      "id": 219633031, 
      "first_name": "Shreeeeeee", 
      "username": "Winner7777", 
      "type": "private" 
     }, 
     "date": 1472473070, 
     "text": "\/menu", 
     "entities": [ 
      { 
      "type": "bot_command", 
      "offset": 0, 
      "length": 5 
      } 
     ] 
     } 
    } 
    ] 
} 

我已生成使用newtonsoft json2csharp

public class From 
{ 
    public int id { get; set; } 
    public string first_name { get; set; } 
    public string last_name { get; set; } 
    public string username { get; set; } 
} 

public class Chat 
{ 
    public int id { get; set; } 
    public string first_name { get; set; } 
    public string last_name { get; set; } 
    public string type { get; set; } 
    public string username { get; set; } 
} 

public class Entity 
{ 
    public string type { get; set; } 
    public int offset { get; set; } 
    public int length { get; set; } 
} 

public class Message 
{ 
    public int message_id { get; set; } 
    public From from { get; set; } 
    public Chat chat { get; set; } 
    public int date { get; set; } 
    public string text { get; set; } 
    public List<Entity> entities { get; set; } 
} 

public class Result 
{ 
    public int update_id { get; set; } 
    public Message message { get; set; } 
} 

public class RootObject 
{ 
    public bool ok { get; set; } 
    public List<Result> result { get; set; } 
} 

類反序列化

var d = Newtonsoft.Json.JsonConvert.DeserializeObject(rcvd_data); 

下一步該做什麼?如何把這一切工作?我很困惑,請幫忙。

+1

的所有屬性,當您使用DeserializeObject指定類型,像這樣:'消息消息= Newtonsoft.Json.JsonConvert.DeserializeObject (rcvd_data);'。然後你可以檢索消息屬性('message.text')。 –

+2

這個問題被問到500次,並沒有顯示研究工作! –

+1

[將JSON數據反序列化爲使用JSON.NET的C#]可能的重複(http://stackoverflow.com/questions/2546138/deserializing-json-data-to-c-sharp-using-json-net) –

回答

4

要反序列化使用此代碼:

RootObject ro = JsonConvert.DeserializeObject<RootObject>(rcvd_data); 

而且在ro擁有所有數據。

bool ok = ro.ok; 

foreach(Result r in ro.result) 
{ 
    int uId = r.update_id; 
    Message m = r.message; 
    int msgId = m.message_id; 
} 
+0

感謝您的快速回復我做你所說的一切okk但我得到一些值爲空,因爲我編譯它。我錯過了什麼? –

+0

你有什麼值爲空?我檢查它 – BWA

+0

結果結果= JsonConvert.DeserializeObject (rcvd_data); int id = Result.update_id; –

0

嘗試這種方式

var d = Newtonsoft.Json.JsonConvert.DeserializeObject<RootObject>(rcvd_‌​data); 

然後d將包含RootObject名單。通過使用foreach迭代就可以得到RootObject模型

+1

根據Json數據判斷,它應該反序列化到'RootObject'類。從這個對象中,你可以訪問一個'Message'對象列表。 –

+0

是的第一次我犯了錯誤,但不幸的是,在編輯過程中,我的力量消失了,所以無法編輯,現在確定 – Mostafiz

1
string data = @"{""ok"":true,""result"":[{""update_id"":920493886,..."; 

RootObject ro = Newtonsoft.Json.JsonConvert.DeserializeObject<RootObject>(data); 

foreach (Result result in ro.result) 
{ 
     //two example fields 
     Console.WriteLine("update_id= " + result.update_id); 
     Console.WriteLine("message text= "+result.message.text); 
}