2013-01-08 1 views
0

TypeNameHandling을 TypeNameHandling.All으로 설정하여 직렬화 및 비 직렬화를 위해 Json.NET을 사용합니다. 이 형식과 어셈블리를 json 파일에 씁니다. "$type":"Testing.Utils.Entry, TestAssembly".Json.NET에서 무작위 어셈블리 및 클래스 이름을 처리하는 방법

그러나 이러한 이름은 우리가 보호 할 때마다 변경되는 실행 파일을 보호 할 때 변경됩니다. 그래서 Json.NET이 런타임시의 내용으로 자동으로 Testing.Utils.Entry, TestAssembly을 해결하도록하고 싶습니다. 이 이름은 완전히 변경 될 수 있으며 예를 들어 'ABC.DEF.GHI'대신 'ABC.DEF'이 될 수도 있습니다.

항목을 일관되게 저장하려면 런타임시 'ABC.DEF'유형을 항상 Testing.Utils.Entry에 저장해야합니다.

+0

모든 직렬화 가능 유형을 보호되지 않은 다른 어셈블리로 내보낼 수 없습니까? –

+0

모든 별도의 어셈블리가 병합됩니다. 나는이 일을 할 수 있었지만, 나는 내가 원하지 않는 추가 도서관을 가지고있다. 프로그램을 보호하면 어셈블리 합병이 더 이상 작동하지 않기 때문에 다시 병합 할 수 없습니다. –

+0

코드 보호를 결정적으로 설정 했습니까? 예 : .NET Reactor에서는 이것을 수행 할 수 있으므로 이름이 매번 새로운 값으로 바뀌지 않습니다. 항상 동일한 방식으로 변환됩니다. –

답변

0

나중에 참조 할 수 있도록 BindToNameBindToType 기능이있는 SerializationBinder을 사용하여이 문제를 해결했습니다.

+0

나는 그것이 작동하도록 고투하고 있으며, 나는 당신이 가지고 있던 동일한 문제가 있습니다. 나를 도울 수있는 코드를 게시 하시겠습니까? 나는 아무 쓸데없는 모든 게시 된 솔루션을 시도했습니다. 어쩌면 객체 지향 프로그래밍에 대한 지식이 부족한 것이 주요한 문제입니다. – melancia

+0

예, 다음과 같은 형식을 사용하십시오. new BindToNameSerialization {AssemblyTo = "YourAssemblyName", TypeTo = "TheNameOfTheClassYouWantToStore", TypeFrom = typeof (TheClassYouWantToStore)}. 저장 및 읽기 모두에 사용할 수 있습니다. Json.NET 웹 사이트에서 SerializationBinder를 적용 할 수있는 저장 및 읽기에 필요한 메소드를 찾을 수 있습니다. –

+0

대단히 감사합니다. 나는 시험해보고 당신에게 알려줄거야. 나는 포럼에 새로운 질문을 올리는 것을 끝내었다. – melancia