求助: vb.net 如何实现一个类的成员变量是动态类型(根据上下文确定)?

2020-04-11 07:58:04 +08:00
 phpfpm

为了避免 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,数据会变长而且排查问题很不方便

谢谢大家!

2247 次点击
所在节点    .NET
4 条回复
noreplay
2020-04-11 10:08:00 +08:00
服务端也是 VB ?是的话,且共享了数据定义的代码,可以在服务端序列化的时候加上类型信息。客户端反序列化的时候就可以自动得到类型。
如果都不是,就只有在客户端反序列化的时候,写一个自定义的转换器了。
phpfpm
2020-04-11 13:03:06 +08:00
@noreplay 服务端当然是用世界上最好的语言写的

换句话说,如果确实是对这种反序列化的类型支持困难的话,我就不折腾了,只是代码写的丑一点而已~
nannanziyu
2020-04-11 14:49:15 +08:00
是我对问题理解有误吗?怎么感觉在问 Json.net 的基本用法
https://gist.github.com/gragrance/041b25a2ec97351039088dce5abe1bd8
phpfpm
2020-04-11 16:17:04 +08:00
@nannanziyu 感动哭了。你完美给我答案了。。

说白了不是 json.net 的问题,我还是不熟悉 vb.net 类继承的最基本的写法……

大佬膝盖请收下!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/661353

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX