XmlSerializer
을 사용하는 레거시 애플리케이션을 수정하여 XML 파일을 클래스로 직렬화/비 직렬화합니다. 요구 사항은 새 앱 버전의 특정 속성을 변경하여 이전 파일을 이전과 마찬가지로로드 할 수 있지만 다음 번에 업그레이드 된 (보다 일반적인) 속성을 유지해야합니다. 그 다음 오래된 속성은 다음 저장시에 버려 질 것입니다.XML 파일 용 시리얼 라이저 업그레이드
<Data>
<ImportantAnalysisResults>
<ImportantAnalysisResult>...</ImportantAnalysisResult>
<ImportantAnalysisResult>...</ImportantAnalysisResult>
<ImportantAnalysisResult>...</ImportantAnalysisResult>
</ImportantAnalysisResults>
</Data>
새로운 응용 프로그램 버전은 저장 파일을 제대로로드하고 다음에 새로운 하나를 사용하여 요소 이름을 교체해야합니다 : 조금 더 잘 설명 할
,이 파일이 모습입니다
<Data>
<Results>
<Result>...</Result>
<Result>...</Result>
<Result>...</Result>
</Results>
</Data>
<Data>
요소에는 더 많은 속성이 있지만이 속성을 변경해야합니다. 또한 ImportantAnalysisResult
은 Result
에서 상속됩니다. 내 Data
클래스에서
는,이 같은 일을 시도 :
class Data
{
[Obsolete("Used for backward compatibility. Use Results instead.")]
[XmlArrayItem("ImportantAnalysisResult", typeof(Result))]
public List<Result> ImportantAnalysisResults
{
get { return _results; }
}
public List<Result> Results
{
get { return _results; }
}
}
을하지만 여전히 새 파일에 예전의 속성을 저장합니다. 다음 저장시 ImportantAnalysisResults
이 사라지는 가장 좋은 방법은 무엇입니까?
로딩하는 동안 이전 속성을 새 Results
속성에 "매핑"하는 방법이 있습니까?
덕분에, 난 그냥이 http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlignoreattribute.aspx (['XmlIgnore']에 대한 MSDN 페이지에서 언급 한 것 보았다) 직렬화 또는 비 직렬화 중에 'XmlIgnore'를 재정의하는 방법으로. 직렬화 중에 만 무시할 수 있으면 작동 할 수도 있습니다. – Lou
[XmlIgnore] 특성을 사용하여 객체 구성원을 직렬화 및 비 직렬화에서 무시합니다 (둘 다에서). 한 가지 방법으로 만 조정할 수는 없습니다. 행운을 빈다. – RajN
'XmlAttributeOverrides'는'XmlSerializer' 인스턴스마다 한 번 인스턴스화됩니다. 따라서 직렬화하는 동안에만 지정하면 파일을 저장하는 동안 속성을 무시합니다. – Lou