2013-05-21 2 views
0

다른 주제에서 반복되는 질문 인 것처럼 들릴 수도 있지만 인터페이스 정의에서 지연됩니다.다른 인터페이스 목록 정의가있는 인터페이스 인스턴스 직렬화

는 I는 인터페이스는, 에게 그것의 정의에 인터페이스의 목록을 포함를 IClass1를, 이름을 말할 수있다라고 IClass2

내가이 인터페이스를 구현하는 사업 부문을 가지고, 이 인터페이스이기 때문에 구현은 물론, 문제가 XmlSerializer은 클래스 1의 목록에 대해 불평 것이다이

class Class1: IClass1 
{ 
    ....whatever properties 
    List<IClass2> DataItems { get; set; } 
} 

class Class2:IClass2 
{ 
    ...whatever properties 
} 

처럼 될 것입니다! 내 질문은 : 간단히 말해서, 나는 항상 DataItems 목록에서 직렬화를 해제해야하는 인스턴스의 유형을 알고 있습니다.이 목록은 Class2 유형이며, XML serializer에이를 알려주는 방법은 무엇입니까?

거짓 속성을 사용하고 직렬화/비 직렬화 과정에서 인터페이스 목록을 무시하는 것이 많은 대안을 보았습니다. 제가 생각하기에 가장 적합한 것이고, 저는 확실히 제 발명하려고하지 않습니다. 자신의 serializer를 구현하거나 클래스에서 serialization을 다시 구현하십시오.

답변

1

KnownTypeAttribute을 사용하면 deserializer에 deserializer를 사용할 때 사용해야하는 하나 이상의 유형 목록을 제공 할 수 있습니다.

version that takes a string parameter은 일련의 유형을 반환하는 메소드의 이름을 지정할 수있게 해주 며, 일부 상황에서는 사용하기가 더 쉽습니다.

내가 제공 한 링크에는 페이지 끝에 샘플 코드가 있습니다.

+0

아야! .net 4.5 .net framework 4를 사용해야합니다./ – simsim

+0

@simsim 괜찮습니다. 닷넷 3.0, 3.5 및 4.0에서도 작동합니다. 도움말 페이지에서 "다른 버전"드롭 다운을 클릭하십시오. –

+0

네, 참조를 추가하지 못했습니다. System.Runtime.Serialization. 어떤 식 으로든, 이것도 작동하지 않을 것입니다. 예제 코드에서 보았 듯이, 인터페이스가 상속 할 클래스를 알고 있어야합니다. 제 경우에는 인터페이스가 분리 된 프로젝트에 있습니다. 구현은 정의 – simsim