VB2012:我正在尝试复制My.Settings类(而不是副本)。我尝试了在这里找到的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但它会导致一个例外
程序集'MyCompany.MyDept.TestApp.My.MySettings‘中的'TestApp,Version=10.1.0.3,Culture=neutral,PublicKeyToken=null’类型不能标记为可串行化。
因为设置是一个类,并且保存为XML,所以必须有一种方法来克隆它们,还是我只是在错误的树上乱吠呢?
~AGP
发布于 2016-06-16 21:00:02
简单的答案是不要使用BinaryFormatter。改用XmlSerializer、DataContractSerializer或JsonSerializer。
(一般来说,Serializable属性和使用它的东西是不推荐的。)
发布于 2017-01-25 13:38:44
还不清楚为什么需要设置的“副本”。因为My.Settings是Shared属性,所以它包含的设置是全局可访问的。但是,由于它在第一次读取设置属性时从配置文件加载所有设置,如果确实需要内存中的第二个副本,则只需创建MySettings类的一个新实例,并让它再次从文件中填充自己。例如,如果您有一个名为String的ClientName设置,您可以这样做:
Dim copy As New My.MySettings()
Dim clientName As String = copy.ClientNamehttps://stackoverflow.com/questions/37869156
复制相似问题