反序列化子对象中具有不同类型的 JSON 对象
Deserialize a JSON object with varying types in child objects
当对象的子对象类型不同时,如何反序列化对象?
我从 Telegram Bot API 得到以下 JSON:
{
"ok":true,
"result":[
{
"update_id":126107325,
"message":{
"message_id":200,
"from":{
"id":someid,
"first_name":"somename"
},
"chat":{
"id":someid,
"title":"asdasdasdasd"
},
"date":1438327336,
"text":"\/lfdngdf"
}
}
]
}
其中 "chat" 表示类型为 "GroupChat" 的对象。
当再次调用相同的方法时,可能会导致:
{
"ok":true,
"result":[
{
"update_id":126107326,
"message":{
"message_id":204,
"from":{
"id":1234567,
"first_name":"somename"
},
"chat":{
"id":1234567,
"first_name":"Paul"
},
"date":1438327788,
"text":"\/blaaa"
}
}
]
}
where chat 表示一个对象 oh type "User"。
我浏览了一些答案,但它们没有帮助,因为我不是直接反序列化 "Message",而是 "UpdatePacket"。
提前致谢!
public class TelegramBoApiMainObject
{
public Boolean ok { get; set; }
public List<TelegramBotApiResult> result { get; set; }
}
public class TelegramBotApiResult
{
public Int32 update_id { get; set; }
public TelegramBotApiMessage message { get; set; }
}
public class TelegramBotApiMessage
{
public Int32 message_id { get; set; }
public TelegramBotApiFrom from { get; set; }
public TelegramBotApiChat chat { get; set; }
public Int32 date { get; set; }
public String text { get; set; }
}
public class TelegramBotApiFrom
{
public Int32 id { get; set; }
public String first_name { get; set; }
}
public class TelegramBotApiChat
{
public Int32 id { get; set; }
public String first_name { get; set; }
public String title { get; set; }
}
然后你可以做一些事情,比如拥有 GroupChat 或 User
var json = "...."; // one of your json string
var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<TelegramBoApiMainObject>(json);
var chat = obj.result[0].message.chat;
if (String.IsNullOrEmpty(chat.title))
{
// user
}
else
{
// group chat
}
当对象的子对象类型不同时,如何反序列化对象? 我从 Telegram Bot API 得到以下 JSON:
{
"ok":true,
"result":[
{
"update_id":126107325,
"message":{
"message_id":200,
"from":{
"id":someid,
"first_name":"somename"
},
"chat":{
"id":someid,
"title":"asdasdasdasd"
},
"date":1438327336,
"text":"\/lfdngdf"
}
}
]
}
其中 "chat" 表示类型为 "GroupChat" 的对象。
当再次调用相同的方法时,可能会导致:
{
"ok":true,
"result":[
{
"update_id":126107326,
"message":{
"message_id":204,
"from":{
"id":1234567,
"first_name":"somename"
},
"chat":{
"id":1234567,
"first_name":"Paul"
},
"date":1438327788,
"text":"\/blaaa"
}
}
]
}
where chat 表示一个对象 oh type "User"。 我浏览了一些答案,但它们没有帮助,因为我不是直接反序列化 "Message",而是 "UpdatePacket"。
提前致谢!
public class TelegramBoApiMainObject
{
public Boolean ok { get; set; }
public List<TelegramBotApiResult> result { get; set; }
}
public class TelegramBotApiResult
{
public Int32 update_id { get; set; }
public TelegramBotApiMessage message { get; set; }
}
public class TelegramBotApiMessage
{
public Int32 message_id { get; set; }
public TelegramBotApiFrom from { get; set; }
public TelegramBotApiChat chat { get; set; }
public Int32 date { get; set; }
public String text { get; set; }
}
public class TelegramBotApiFrom
{
public Int32 id { get; set; }
public String first_name { get; set; }
}
public class TelegramBotApiChat
{
public Int32 id { get; set; }
public String first_name { get; set; }
public String title { get; set; }
}
然后你可以做一些事情,比如拥有 GroupChat 或 User
var json = "...."; // one of your json string
var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<TelegramBoApiMainObject>(json);
var chat = obj.result[0].message.chat;
if (String.IsNullOrEmpty(chat.title))
{
// user
}
else
{
// group chat
}