2016-08-16 27 views
1

在telegram.org API架构时,message类型被定义为这样:处理在Telegram.org API模式未定义类型,如 “MessageMedia询价”

消息#c09be45f国旗:#出:标志。 1?true true:flags.4?true media_unread:flags.5?true silent:flags.13?true post:flags.14?true id:int from_id:flags.8?int to_id:Peer fwd_from:flags.2? MessageFwdHeader via_bot_id:flags.11?int reply_to_msg_id:flags.3?int date:int message:string media:flags.9?MessageMedia reply_markup:flags.6?ReplyMarkup entities:flags.7?Vector views:flags.10?int edit_date :flags.15?int = Message;

注意可选参数media:flags.9?MessageMedia定义为类型MessageMedia。但没有定义的MessageMedia,所以我的客户端不知道如何序列化/反序列化它。

什么类型是MessageMedia,我该如何处理其他可能未定义的类型?

回答

0

明白这一点的最好办法是media:flags.9?MessageMedia代表一般类型或像他们说的a base type这可能是下列任何类型:

messageMediaEmpty#3ded6320 = MessageMedia; 
messageMediaPhoto#3d8ce53d photo:Photo caption:string = MessageMedia; 
messageMediaGeo#56e0d474 geo:GeoPoint = MessageMedia; 
messageMediaContact#5e7d2f39 phone_number:string first_name:string last_name:string user_id:int = MessageMedia; 
messageMediaUnsupported#9f84f49e = MessageMedia; 
messageMediaDocument#f3e02ea8 document:Document caption:string = MessageMedia; 
messageMediaWebPage#a32dd600 webpage:WebPage = MessageMedia; 
messageMediaVenue#7912b71f geo:GeoPoint title:string address:string provider:string venue_id:string = MessageMedia; 

这种模式在整个电报API是常见

+0

但即使基类型最终必须解析为已知类型(Int,Long,String等),以便它们可以被序列化/反序列化,对吗?在我的情况下,我目前正在反序列化,我会担心后面的序列化。如果'MessageMedia'可以是上面的任何一个,我怎么知道反序列化的类型? –

+0

@KennyCason反序列化就是我在阅读字段描述符(如MessageMedia''')时的意思,你不会找到''MessageMedia''',而是它的一个'''MessageMedia'' ''variants –

+0

我怎么知道哪一个?服务器返回的身份证号码是什么? –