2014-11-25 2 views
6

내 서버와 클라이언트에 대한 여러 모델이 포함 된 공용 클래스 라이브러리가 있습니다. 클라이언트가 Xamarin에서 실행되므로 공용 라이브러리는 PCL (Portable Class Library)이어야합니다. 내 서버에서 [Serializable] 특성

는 이러한 개체는 내가 중 하나를 할 수 없어, [Serializable]로 표시 또는 PCL에있는 MarshalByRefObject

에서 상속하는 중 필요가 나의 이해에 객체 있도록 응용 프로그램 도메인 원격/마샬링 주변에 전달된다 내 모델의 이러한 것들.

내 질문은 : 어떻게 이러한 개체를 AppDomain Remoting/Marshaling과 함께 작동시키고 휴대용 클래스 라이브러리에 둘 수 있습니까?

+0

정말 이진 객체로 직렬화해야합니까? 이 문제를 피할 수 있도록 JSON 또는 XML로 변환하면 용도에 맞게 사용할 수 있습니까? – mason

+0

직렬화는 프록시 개체에 의해 자동으로 수행됩니다. 내 통제에서. –

답변

10

"mock"[Serializable] 속성이 포함 된 CSShim이라는 PCL 지원 라이브러리를 만들었습니다. 이 라이브러리가 PCL 라이브러리에서 참조되는 경우 코드에 [Serializable]을 사용할 수 있습니다. 정기적 .NET 데스크톱 응용 프로그램에서 PCL 라이브러리를 소비 할 때 다음

,의 PCL CSShim에 대한 참조는 소위 "bait-and-switch" 기술을 사용하여, CSShim의 .NET의 anolugue에 대한 참조로 대체됩니다 . .NET 아날로그는 [Serializable]의 호출을 mscorlib[TypeForwardedTo]을 사용하여 .NET 구현에 전달합니다.

CSShim는 .NET 프레임 워크 4.5을 대상으로, PCL 프로필 259에 대한 NuGet에서 현재 사용할 수있는 높은, 윈도우 8 이상, 윈도우 폰 8.1, 윈도우 폰 실버 8 이상, 자 마린 안드로이드와 자 마린 아이폰 OS.

CSShim 소스 코드는 Github에 있습니다. PCL 라이브러리가 .NET 4.5 이상을 대상으로하는 제한 사항 인 경우 이론적으로 PCL 라이브러리를 프로필 328과 같은 .NET Framework 4 프로필로 다시 지정할 수 있지만 다시 대상 지정은 "어려운 문제"일 수 있습니다. -)

또는 SerializableAttribute과 관련된 유형의 "모의"구현 만 포함하는 사용자 고유의 PCL 지원 라이브러리를 만들고 유형 전달을 사용하여 지원 라이브러리의 .NET 아날로그를 작성하여에서 유효한 유형을 호출 할 수 있습니다. NET 코어 어셈블리. 나는이 접근 방법을보다 자세히 설명했다. this StackOverflow 대답.

+1

매력처럼 작동했습니다. NET에 대해 거의 모든 것을 할 라이브러리가 있다고 느낍니다. –

+0

원칙적으로 라이브러리는 .NET의 상당 부분을 확장 할 수 있습니다. 이 라이브러리를 개발했을 때, 저는 AFL.NET *, * Accord.NET *, * Encog * 및 * fo-dicom *의 PCL : ification을 용이하게하기위한 자신의 필요에 집중했습니다. 그러나 도서관 확장에 도움이 될 수있는 모든 사용자 공헌을 기꺼이 권장합니다. –

+0

그건 그렇고,'OnSerializing '등의 속성에 관해서는 바이너리 직렬화와 PCL에 관한 한 가지 제한이 있습니다. 자세한 내용은이 [질문] (http://stackoverflow.com/q/20666731/650012)을 참조하십시오. 바라기를 이것은 당신을위한 관심사가 아니다. –