V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
phpfpm
V2EX  ›  .NET

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

  •  
  •   phpfpm · 2020-04-11 07:58:04 +08:00 · 2247 次点击
    这是一个创建于 1714 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    谢谢大家!

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

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

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

    大佬膝盖请收下!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4044 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 05:24 · PVG 13:24 · LAX 21:24 · JFK 00:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.