克隆My.Settings

时间:2016-06-16 20:52:43

标签: vb.net clone serializable my.settings

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

但会导致异常

  

输入' MyCompany.MyDept.TestApp.My.MySettings'在大会   ' TestApp,Version = 10.1.0.3,Culture = neutral,PublicKeyToken = null'是   没有标记为可序列化。

设置是一个类并保存为XML,必须有一种克隆它们的方法,或者我只是咆哮错误的树?

〜AGP

2 个答案:

答案 0 :(得分:0)

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

(通常,不推荐使用Serializable属性和使用它的内容。)

答案 1 :(得分:0)

不清楚为什么你需要一个"副本"的设置。由于My.SettingsShared属性,因此它包含的设置是全局可访问的。但是,因为它在第一次读取设置属性时从配置文件加载其所有设置,如果你真的需要在内存中使用第二个副本,你可以创建一个MySettings类的新实例并让它再次从文件填充自己。例如,如果您有一个名为String的{​​{1}}设置,则可以执行以下操作:

ClientName