1

VB2012:我正在尝试制作 My.Settings 类的克隆(不是副本)。我尝试了在 SO 上找到的 DeepClone 功能

Public Function DeepClone(Of T)(ByVal a As T) As T
    Using stream As New System.IO.MemoryStream
        Dim formatter As New BinaryFormatter
        formatter.Serialize(stream, a)
        stream.Position = 0
        Return DirectCast(formatter.Deserialize(stream), T)
    End Using
End Function

但这会导致异常

在程序集“TestApp,Version=10.1.0.3,Culture=neutral,PublicKeyToken=null”中键入“MyCompany.MyDept.TestApp.My.MySettings”未标记为可序列化。

由于设置是一个类并保存为 XML,因此必须有一种方法来克隆它们,或者我只是在叫错树?

~AGP

4

2 回答 2

0

目前尚不清楚为什么需要设置的“副本”。由于My.Settings是一个Shared属性,它包含的设置是全局可访问的。但是,由于它会在第一次读取设置属性时从配置文件中加载所有设置,因此如果您确实需要在内存中进行第二次复制,您可以创建MySettings该类的新实例并让它再次从文件中填充自己. 例如,如果您有一个String名为 的设置ClientName,您可以执行以下操作:

Dim copy As New My.MySettings()
Dim clientName As String = copy.ClientName
于 2017-01-25T13:38:44.520 回答
0

简单的答案是不使用 BinaryFormatter。请改用 XmlSerializer、DataContractSerializer 或 JsonSerializer。

(通常Serializable不推荐使用该属性和使用它的东西。)

于 2016-06-16T21:00:02.703 回答