为了避免 A-B problems,我先描述我的原始问题
服务端返回形如
{
"code": 0,
"data": {
"foo": "bar"
}
}
的 json 数据给客户端(vb.net, json 用的是 newton 的包) 客户端希望用类似于这样的签名方式的函数获取数据:
Dim data as CustomData = Request(config, CustomData)
Request 具有这样的函数签名:
Function Request(byVal config as RequestConfig, byVal T as Type) as T
将 json 解包的类型传过去:
Function Request(byVal config as RequestConfig, byVal T as Type) as T
...(request...)
Dim data as T = JsonConvert.DeserializeObject(of Response_of_T).data
return data
End Function
我想请教的问题: 1 如何动态的传一个类型给一个函数并且作为返回值? 实现 Request 这个函数
2 如何动态的创建一个类,这个类的某个成员可以根据模板创建不同的类型? 形如
class Response<T>
Public code as Integer
Public data as T
End Class
我说下我目前的解决方案:
class Response
Public code as Integer
Public data as String
End Class
服务端吐数据的时候将 data 再 json_encode 一次, 解包的时候直接将 data 作为 string 返回给业务代码,业务代码根据上下文的 T 再解包一次
如果解决了问题 1,Request 可以接受一个 T,二次解包在 request 里面进行返回 T,但是服务端还是要再 json_encode 一次 data,数据会变长而且排查问题很不方便
谢谢大家!
1
noreplay 2020-04-11 10:08:00 +08:00 via Android 1
服务端也是 VB ?是的话,且共享了数据定义的代码,可以在服务端序列化的时候加上类型信息。客户端反序列化的时候就可以自动得到类型。
如果都不是,就只有在客户端反序列化的时候,写一个自定义的转换器了。 |
2
phpfpm OP |
3
nannanziyu 2020-04-11 14:49:15 +08:00 1
|
4
phpfpm OP |