내 응용 프로그램에서 DataContractSerializer를 사용하여 이전 버전과의 호환 및 왕복 (가능한 경우) 지원을 시도합니다.DataContractSerializer에서 알 수없는 형식을 무시하는 방법
왕복 여행을 지원할 수 있습니까 아니면 다음 시나리오에서 알 수없는 유형을 무시하는 것이 가능합니까?
개체 유형의 속성을 가진 ClassWithObject 클래스가 있고이 응용 프로그램의 이전 버전이이 속성에 CurrentAdditionalData 유형의 개체를 저장했다고 가정합니다.
[DataContract]
[KnownType(typeof(CurrentAdditionalData))]
public class ClassWithObject : IExtensibleDataObject
{
#region IExtensibleDataObject Members
private ExtensionDataObject extensionDataObject_value;
[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
public ExtensionDataObject ExtensionData
{
get
{
return extensionDataObject_value;
}
set
{
extensionDataObject_value = value;
}
}
#endregion
[DataMember]
public object AdditionalData { get; set; }
}
[DataContract]
public class CurrentAdditionalData : IExtensibleDataObject
{
#region IExtensibleDataObject Members
private ExtensionDataObject extensionDataObject_value;
[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
public ExtensionDataObject ExtensionData
{
get
{
return extensionDataObject_value;
}
set
{
extensionDataObject_value = value;
}
}
#endregion
[DataMember]
public int MyProperty { get; set; }
}
내 응용 프로그램의 새 버전에서는 CurrentAdditionalData 클래스를 알고 있기 때문에이 파일을로드해도 아무런 문제가 없습니다.
하지만 새 버전에 이전 버전이 알지 못하는 FutureAdditionalData 유형의 객체가 저장되면 어떻게 될까요?
[DataContract]
public class FutureAdditionalData : IExtensibleDataObject
{
#region IExtensibleDataObject Members
private ExtensionDataObject extensionDataObject_value;
[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
public ExtensionDataObject ExtensionData
{
get
{
return extensionDataObject_value;
}
set
{
extensionDataObject_value = value;
}
}
#endregion
[DataMember]
public string Property1 { get; set; }
[DataMember]
public float Property2 { get; set; }
[DataMember]
public double Property3 { get; set; }
}
이전 버전이이 파일을 읽으려고하면이 유형을 알지 못하므로 SerializationException이 발생합니다.
알 수없는 유형을 알고 단순히 무시하는 방식으로 이전 버전을 수정할 수 있습니까?
또는 이전 버전에서 파일을 다시 저장하면 알 수없는 개체를 ExtensionData로로드하고 수정하지 않고 작성할 수 있습니까?
합니다. ClassWithObject는 객체가 어떤 유형인지 알지 못하기 때문에 객체를 저장하기 만합니다. 이후 버전의 응용 프로그램은 객체를 새로운 유형으로 설정합니다. 분명히 이전 버전은 [KnownType (typeof (FutureAdditionalData)] 속성이 설정되어 있지 않으며 SerializationException을 제공합니다. – MTR