2010-12-06 4 views
5

신뢰할 수없는 환경 (Unity 3D를 사용하는 웹 브라우저)에서 직렬화 및 비 직렬화하려는 객체의 꽤 복잡한 웹이 있습니다. 일반 BinaryFormatter 직렬화가 정상적으로 작동하지만 "개인 필드 액세스"오류로 직렬화가 중단됩니다. 내가 로컬에서 실행할 때 완벽하게 작동합니다.신뢰할 수없는 직렬화 전략

내 개인 필드를 모두 공개하여 코드베이스를 채우지 않을 것입니다. deserialization을 수행하지 않고 신뢰할 수없는 환경에서 작동하도록하는 가장 좋은 방법은 무엇입니까? 직렬화 방법을 변경하는 것에 대해 열려 있습니다. BinaryFormatter은 시작하기에 가장 쉬운 방법이었습니다. 나는 내 개인 데이터에 액세스 직렬화를 방지하고 싶지 않은

UPDATE, 나는 직렬화, 그것을 공개 할 필요 내 코드의 캡슐화를 손상시키지 않고 내 개인 데이터에 액세스 할 수 있도록합니다.

감사합니다.

+0

이것은 asp.net 응용 프로그램입니까? – TalentTuner

+0

@Saurabh, no. 그것은 unity3d, .NET을 실행하는 브라우저 플러그인입니다. – luqui

답변

0

직렬화로 개인 필드 액세스를 막으려면, 아마도 Json 직렬화의 Xml 직렬화로 넘어 가고 싶을 수 있습니다.

NonSerializaed 특성을 사용하여 비공개 필드의 직렬화를 방지 할 수 있지만 개발자가 필드에 올바른 값을 포함 할 것으로 예상 할 때 문제가 발생할 수 있으며 전송할 때 필드 값이 손실된다는 사실을 고려하지 않습니다. 유니티 플러그인에.

+0

('[비 직렬화]'추가) 물론 그것은 당신이 오해하지 않는 한 실제로 어떤 것도 직렬화하지 않는다는 것을 의미합니다. –

+0

아니요, 당신은 오해하지 않았습니다. 앞서 언급했듯이 비 직렬화 된 필드의 값은 손실되고 낮은 수준의 명령 패턴과 같은 상황에서 또는 Json 또는 Xml 직렬화로 전환하는 시나리오에서 심각한주의가 필요합니다. – Anton

2

XmlSerializerJavaScriptSerializer과 같은 일련 번호는 이어야합니다. 따라서 (십자 기호)은 신뢰할 수있는 방식으로 작동합니다. 바이너리를 원한다면 protobuf-net을 시도해 볼 수도 있지만,이 시나리오를 적극적으로 테스트하지는 않았다. (Silverlight와 같이 작동하지만, 상당히 까다로운 트러스트 모델을 사용한다.)

BinaryFormatter을 사용하고 싶지만 직접 필드를 만지지 않으려면 ISerializable을 구현할 수 있지만 수동으로 수행하는 것은 고통 스럽습니다.

1

답변 중 아무 것도 내 질문에 답하지 못했습니다 (설명을 보려면 업데이트 참조). 나는 BinaryWriter을 사용하여 간단한 직렬화 형식을 작성했다. 결국 내가 한 것은 내 수업을 위해 수동으로 ISerializable 인터페이스를 구현하는 것과 같습니다. 나는 그래프 serializatoin 코드를 수동으로 구현해야했다. 열심히하지는 않지만 조금 미묘합니다. 이미 저를 위해 완료되었습니다. 미래의 perople을 위해이 질문이 있으면 더 좋은 대답이 없으면 수동으로 ISerialzable을 구현하는 것이 좋습니다.

관련 문제