2017-11-11 62 views
1

我想製作一個序列化指定爲參數的LIST的過程。但我不知道如何指定GetType(List(of MyClass)列表)當MyClass被參數分析時。我不能在程序中「硬編碼」MyClass,因爲我必須在不同的類中使用這個序列化程序。解析列表作爲自定義串行器過程的參數

Sub Main 
    Dim MyList As New List(Of NameClass) 
    MyList.Add(New NameClass("Thomas") 
    MyList.Add(New NameClass("Michael") 
    List_To_XMLFile(MyList, NameClass, "c:\temp\file.xml") 
End sub 

Sub List_To_XMLFile(MyList As List(Of Object), ListOfCObj As Object, Path As String) 
    Dim ser As XmlSerializer = New XmlSerializer(GetType(List(Of ListOfObject))) 
    Dim fs As FileStream = New FileStream(Path, FileMode.Create) 
    ser.Serialize(fs, MyList) 
    fs.Close() 
End Sub 

Public Class NameClass 
    Property Name As String 
    Sub New() 
    End Sub 
    Sub New(Name As String) 
     Me.Name = Name 
    End Sub 
End Class 

回答

1

對象知道它的類型,所以如果你傳遞的對象不需要傳遞類型。

Sub List_To_XMLFile(Of T)(MyList As List(Of T), Path As String) 
    Dim ser As XmlSerializer = New XmlSerializer(MyList.GetType()) 
    Dim fs As FileStream = New FileStream(Path, FileMode.Create) 
    ser.Serialize(fs, MyList) 
    fs.Close() 
End Sub 

並調用與

List_To_XMLFile(MyList, "c:\temp\file.xml") 

注意的過程,因爲我使用泛型類型,該方法可以稱爲合格New List(Of NameClass)New List(Of OtherClass)等,使T需要的類型。

+0

但我不能在參數中「硬編碼」NameClass。整個想法是你可以重複使用不同的列表和類的過程,所以它必須被解析爲引用/變量? – MrCalvin

+0

然後我們可以使用通用類型T – derloopkat

+0

它完美的工作!恐怕這將需要幾個星期或一個月的時間來閱讀MSDN和谷歌,最終我自己也許會得到這個解決方案,或許有,哈哈。我非常感激:-) :)-) – MrCalvin