
为了避免 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 服务端也是 VB ?是的话,且共享了数据定义的代码,可以在服务端序列化的时候加上类型信息。客户端反序列化的时候就可以自动得到类型。 如果都不是,就只有在客户端反序列化的时候,写一个自定义的转换器了。 |
2 phpfpm OP |
3 nannanziyu 2020-04-11 14:49:15 +08:00 |
4 phpfpm OP |