【问题标题】:VB.NET, make a function with return type generic?VB.NET,创建一个返回类型通用的函数?
【发布时间】:2011-02-13 17:28:20
【问题描述】:

目前我已经编写了一个反序列化 XML 的函数,如下所示。 如何更改它,以便每次我想序列化另一个对象类型时都不必替换类型?当前的对象类型是 cToolConfig。如何使这个函数通用?

       Public Shared Function DeserializeFromXML(ByRef strFileNameAndPath As String) As XMLhandler.XMLserialization.cToolConfig
        Dim deserializer As New System.Xml.Serialization.XmlSerializer(GetType(cToolConfig))
        Dim srEncodingReader As IO.StreamReader = New IO.StreamReader(strFileNameAndPath, System.Text.Encoding.UTF8)
        Dim ThisFacility As cToolConfig

        ThisFacility = DirectCast(deserializer.Deserialize(srEncodingReader), cToolConfig)
        srEncodingReader.Close()
        srEncodingReader.Dispose()

        Return ThisFacility
    End Function


    Public Shared Function DeserializeFromXML1(ByRef strFileNameAndPath As String) As System.Collections.Generic.List(Of XMLhandler.XMLserialization.cToolConfig)
        Dim deserializer As New System.Xml.Serialization.XmlSerializer(GetType(System.Collections.Generic.List(Of cToolConfig)))
        Dim srEncodingReader As IO.StreamReader = New IO.StreamReader(strFileNameAndPath, System.Text.Encoding.UTF8)
        Dim FacilityList As System.Collections.Generic.List(Of cToolConfig)
        FacilityList = DirectCast(deserializer.Deserialize(srEncodingReader), System.Collections.Generic.List(Of cToolConfig))
        srEncodingReader.Close()
        srEncodingReader.Dispose()

        Return FacilityList
    End Function

【问题讨论】:

    标签: c# xml vb.net xml-serialization


    【解决方案1】:

    这是你的意思吗?

    Public Shared Function DeserializeFromXML(Of T)(ByRef strFileNameAndPath As String) As T
        Dim deserializer As New System.Xml.Serialization.XmlSerializer(GetType(T))
        Dim srEncodingReader As IO.StreamReader = New IO.StreamReader(strFileNameAndPath, System.Text.Encoding.UTF8)
        Dim ThisFacility As T
    
        ThisFacility = DirectCast(deserializer.Deserialize(srEncodingReader), T)
        srEncodingReader.Close()
        srEncodingReader.Dispose()
    
        Return ThisFacility
    End Function
    
    
    Public Shared Function DeserializeFromXML1(Of T)(ByRef strFileNameAndPath As String) As System.Collections.Generic.List(Of T)
        Dim deserializer As New System.Xml.Serialization.XmlSerializer(GetType(System.Collections.Generic.List(Of T)))
        Dim srEncodingReader As IO.StreamReader = New IO.StreamReader(strFileNameAndPath, System.Text.Encoding.UTF8)
        Dim FacilityList As System.Collections.Generic.List(Of T)
        FacilityList = DirectCast(deserializer.Deserialize(srEncodingReader), System.Collections.Generic.List(Of T))
        srEncodingReader.Close()
        srEncodingReader.Dispose()
    
        Return FacilityList
    End Function
    

    注意,可以在T上加约束,比如:

    Public Shared Function DeserializeFromXML(Of T As Class)
    

    甚至放多个约束,比如:

    Public Shared Function DeserializeFromXML(Of T As {Class, New, IDisposable})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-18
      • 1970-01-01
      • 1970-01-01
      • 2021-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多