XML 직렬화에 대한 질문이 하나 더 있습니다. 나는 Base
클래스가, 나는 그것에서 상속 Derived1
및 Derived2
클래스가 있습니다. 나는 XML 요소 <base>
에서 그들을 직렬화하는 나는 Derived1
인스턴스를 생성 할 <base attr="1">
또는 Derived2
예를 <base attr="2">
경우 경우. 내가 어떻게 해? 제발, XmlSerializes
과 XmlAttributeOverrides
을 사용합니다. 당신에게XML 직렬화 : 속성 값에 따라 파생 클래스를 인스턴스화하십시오.
0
A
답변
0
편집 감사합니다 나는 완전히 당신의 정확한 상황에 맞게 내 대답을 수정. 이미베이스 목록을 올바르게 직렬화했다고 가정하면 아래 코드가 작동합니다. 이 OCP를 위반
나는 일반적으로 스위치 문을 권하고 싶지 않다. 다형성은 보통 더 나은 대답입니다. 그러나 신속하고 지저분한 솔루션과 상대적으로 가치가 적은 switch 문 (예 : 귀하의 경우)의 경우이 방법이 효과적입니다.
중요 참고 : XML 시리얼 라이저는 이미 일이 제대로 직렬화 된 가정, 올바른 파생 클래스에 직렬화됩니다. 그러나 어떤 이유로 든 상황에 해당하지 않는 경우 나머지 코드가 필요합니다 (switch 문을 사용하여 foreach).
private static void ImportDerivedClasses()
{
List<Base> bases;
string filePathAndName = @"c:\temp\SerializedBases.xml";
using (FileStream fileStream = new FileStream(filePathAndName, FileMode.Open))
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<Base>));
bases = xmlSerializer.Deserialize(fileStream) as List<Base>;
}
// The rest of this is unnecessary if we originally serialized correctly.
List<Base> deserializedBases = new List<Base>();
foreach(Base baseClass in bases)
{
switch (baseClass.Attr)
{
case "1":
deserializedBases.Add(new Derived1());
break;
case "2":
deserializedBases.Add(new Derived2());
break;
default:
// Log warning
break;
}
}
}
+0
와우, FxCop을 억제 할 때 사용할 메시지까지! 어, 당신이 특정 프로젝트에 대해 정말로 모르는 사람들을 위해 그것을 조금 줄였습니까? – sq33G
관련 문제
- 1. DB 값에 따라 속성 직렬화 및 역 직렬화
- 2. id 값에 따라 달라지는 ActiveRecord 속성 지속성
- 3. XML 직렬화 - collection 속성
- 4. C# Xml-IXmlSerializable을 사용하여 파생 클래스 직렬화
- 5. ExtJS에서 지정된 ID로 클래스를 인스턴스화하십시오.
- 6. 파생 클래스 직렬화/역 직렬화
- 7. XML 직렬화로 읽기 전용 속성 직렬화
- 8. 직렬화 및 속성
- 9. 속성 값에 따라 다른 변수 선언하기
- 10. 속성 값에 따라 다른 동적 리소스 표시
- 11. 핵심 데이터 : 값에 따라 속성 반환
- 12. 부모 클래스에서 올바른 서브 클래스를 인스턴스화하십시오.
- 13. Xml 직렬화 - 기본 생성자
- 14. Xml 직렬화
- 15. 상속 : 파생 클래스의 파생 속성
- 16. 슈퍼 클래스를 통한 직렬화/비 직렬화
- 17. Java와 비슷한 Ruby 클래스를 동적으로 인스턴스화하십시오.
- 18. 모듈을 동적으로 가져오고 파이썬에서 클래스를 인스턴스화하십시오.
- 19. XML 속성 값에 속성을 설정하는 방법
- 20. WPF : 값에 따라 DataTemples을 변경하십시오.
- 21. Silverlight에서 파생 클래스를 직렬화하는 방법
- 22. 파생 된 클래스 정의 직렬화
- 23. XSLT를 사용하여 속성 값에 따라 속성을 표시하는 방법은 무엇입니까?
- 24. 사용자 정의 클래스를 포함하는 클래스를 직렬화
- 25. 역 직렬화 XML 요소는
- 26. C++에서의 XML 직렬화/직렬화
- 27. XML 직렬화 및 비누 직렬화
- 28. 직렬화 된 데이터에서 파생 클래스를 어떻게 역 직렬화합니까?
- 29. DependencyObject에서 파생 된 클래스를 직렬화 가능으로 표시 할 수 있습니까?
- 30. 속성 값에 따라 XSLT 대체 구문 분석 결과가 출력됩니다.
당신을 위해 작업 아래에있는 내 대답을합니까? –