또한 다른 유형의 직렬화 복원되는 경우에로드됩니다 유형을 정의 할 SerializationBinder
을 사용할 수
public sealed class Version1ToVersion2DeserializationBinder : SerializationBinder
{
public override Type BindToType(string assemblyName, string typeName)
{
Type typeToDeserialize = null;
if (typeName == "OldClassName")
typeName = "NewClassName";
typeToDeserialize = Type.GetType(String.Format("{0}, {1}",
typeName, assemblyName));
return typeToDeserialize;
}
}
이 역 직렬화하려면, 당신은 단지 BinaryFormatter
의 Binder
속성을 설정해야합니다 :
를
formatter.Binder = new Version1ToVersion2DeserializationBinder();
NewClassName obj = (NewClassName)formatter.Deserialize(fs);
완벽을 기하기 위해이 문제를 "직렬화 대리"로 해결할 수도 있지만 그 일은 지저분하고 어렵습니다. 처음에는 계약 기반 시리얼 라이저로 시작하는 것이 더 좋습니다. 또한, [TypeForwardedTo]를 사용하는 한 * 유형을 (어셈블리 사이에서) 이동할 수 있지만 이름을 바꾸기는 쉽지 않습니다. –
먼저 XmlSerialize를 사용하여 직렬화하는 방법을 알아야합니다. 전략 게임 프로그래밍을 배우기 위해 http://www.codeproject.com/KB/game/BattleField.aspx를 수정하려고합니다. 지도 편집기는 BinaryFormatter를 사용합니다. –