【问题标题】:Parse list as argument to a custom serializer procedure将列表解析为自定义序列化程序的参数
【发布时间】:2018-04-24 14:34:27
【问题描述】:

我想创建一个序列化指定为参数的 LIST 的过程。但是当 MyClass 通过参数解析时,我无法弄清楚如何指定 GetType(List(of 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

【问题讨论】:

    标签: xml vb.net list serialization


    【解决方案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 就会采用该类型。

    【讨论】:

    • 但我不能在参数中“硬编码”NameClass。整个想法是您可以使用不同的列表和类重用该过程,因此必须将其解析为引用/变量?
    • 那么我们可以使用泛型类型T
    • 完美运行!恐怕我自己要花几周或几个月的时间阅读 MSDN 和 Google 才能最终找到那个解决方案,也许永远,哈哈。我非常感谢 :-) :-)
    • 并设置根元素的名称: Dim ser As XmlSerializer = New XmlSerializer(MyList.GetType(),New XmlRootAttribute("MyRoot")) 如果有人想摆脱 ArrayOfClassName
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 2022-10-08
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    相关资源
    最近更新 更多