代码之家  ›  专栏  ›  技术社区  ›  DanP

为什么此类型不可序列化?

  •  1
  • DanP  · 技术社区  · 14 年前

    我正在尝试确定此类型不可序列化的原因(由测试 Type.IsSerializable() )

    <Serializable()> _
    Public MustInherit Class WellKnownInstanceCollectionWithTypedId(Of T As WellKnownInstanceWithTypedId(Of IdT), IdT)
        Inherits ReadOnlyCollection(Of T)
    
        Public Sub New(ByVal list As IList(Of T))
            MyBase.New(list)
        End Sub
    
    
        Public Function GetById(ByVal id As IdT) As T
            Return Me.FirstOrDefault(Function(item) item.Id.Equals(id))
        End Function
    
    End Class
    

    我知道这和我的 GetById 功能,因为如果我删除,一切都是好的。有人能告诉我要使此类型可序列化需要更改什么吗?

    更新:

    当我改变我的 盖比 这样的实现,一切都很好。很明显,这与Linq(如下建议)有关系——有人能给我更详细的说明为什么会这样吗?

        Public Function GetById(ByVal id As IdT) As T
            For Each i In Me
                If i.Id.Equals(i) Then
                    Return i
                End If
            Next
            Return Nothing
        End Function
    
    2 回复  |  直到 12 年前
        1
  •  3
  •   Mark Hurd    12 年前

    它可能与lambda表达式相关( Function GetById .
    尝试将其转换为 AddressOf 调用以查看为您创建的后台闭包vb.net是否妨碍了序列化。

    (促进评论回复)
    在完整的代码中,测试 linq或闭包,只需将原始代码更改为 Return Me.FirstOrDefault(False) .

    我相信这会使它再次具有系列性。如果是这样,您可以使用 AddressOf id.Equals 而不是 Function(Item)... 它具有相同的语义,除非您希望满足一个空值( Nothing ) id .

        2
  •  2
  •   James O'Sullivan    14 年前

    可序列化类型需要具有默认构造函数