2016-06-16 2 views
1

VB2012 : My.Settings 클래스의 복제본 (복사본 아님)을 만들려고합니다. 나는 SOMy.Settings의 복제본 만들기

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 

에 여기에있는 DeepClone 기능을 시도하지만 국회 'TestApp가, 버전 = 10.1 예외

유형'MyCompany.MyDept.TestApp.My.MySettings '을 발생합니다. 0.3, Culture = neutral, PublicKeyToken = null '은 이 직렬화 가능으로 표시되어 있지 않습니다.

설정이 클래스이고 XML로 저장되면 복제 할 방법이 있어야합니까? 아니면 잘못된 트리를 짖고 있습니까?

~ AGP

+0

을 당신이 그것을 복제하고 그것을 사용하는 방법은 모든 직렬화 할 수 있도록'Serializable' 속성을 필요로 바이너리 직렬화를 통해입니다 비공개 필드. XML 직렬화는 공용 필드를 직렬화 만하기 때문에 해당 속성이 필요하지 않습니다. –

+0

얕은 복제만으로 충분하지 않습니까? – miroxlav

+0

내가 따라야 할 샘플이있다. 나는 무엇이든 시도 할 것이다. – sinDizzy

답변

0

쉬운 대답은 BinaryFormatter를 사용하지 않는 것입니다. 대신 XmlSerializer, DataContractSerializer 또는 JsonSerializer를 사용하십시오.

(일반적으로 Serializable 속성과 그것을 사용하는 일이되지 않습니다.) 당신은 설정의 "복사"를해야하는 이유

+0

XML 접근법을 사용해 보았습니다. http://stackoverflow.com/questions/1251277/net-deep-cloning-what-is-the-best-way-to-do-that 그리고 "MyCompany.MyDept.TestApp.My .MySettings는 보호 수준으로 인해 액세스 할 수 없으며 공개 유형 만 처리 할 수 ​​있습니다. " 그래서 또 다른 접근법을 시도 할 것입니다. – sinDizzy

0

그것은 분명하지 않다. My.SettingsShared 속성이므로이 속성에 포함 된 설정은 전역 적으로 액세스 할 수 있습니다. 그러나 설정 속성을 처음 읽을 때 구성 파일에서 모든 설정을로드하므로 실제로 메모리에 두 번째 복사본이 필요한 경우 MySettings 클래스의 새 인스턴스를 만들어 파일에서 자체 채울 수 있습니다 다시. 당신이 ClientName라는 String 설정이 있다면 예를 들어, 당신이 뭔가를 할 수 있습니다 :

Dim copy As New My.MySettings() 
Dim clientName As String = copy.ClientName 
관련 문제