2009-03-04 2 views
0

나는 내 응용 프로그램에서 전문 목록을 기술하는 인터페이스 ...개체가 아닌 개체 인터페이스의 배열을 반환 할 수 있습니까?

Public Interface IAlphabeticListItem 

    Property StartingLetter() As String 
    Property DetailsList() As Generic.List(Of DetailsData) 

End Interface 

여러 개체가이 인터페이스를 구현을 가지고,하지만 난 기본 개체로하지 않는 웹 서비스에이를 반환하고자하지만, 인터페이스 등.

<WebMethod()> _ 
Public Function GetCategoryList(...) As Generic.List(Of IAlphabeticListItem) 

    ... 

End Function 

는 슬프게도,이

인터페이스 IAlphabeticListItem를 직렬화 할 수 없습니다 예외를 발생합니다.

예외 정보 : System.NotSupportedException : IAlphabeticListItem 인터페이스를 serialize 할 수 없습니다.

인터페이스를 직렬화 할 수있는 방법이 있습니까, 아니면 각 개체를 인터페이스를 구현하는 구체적인 클래스로 변환 한 다음 해당 클래스를 반환해야합니까?

답변

1

Yes (예)를 확장합니다. 지원되지 않기 때문에 XML 직렬화에 대한 제네릭 클래스를 직접 노출 할 수 없습니다. 그러나 동일한 콜렉션에 비 제네릭 인터페이스를 표시하고이를 직렬화 할 수 있습니다. 이 블로그는이 구현 GetObjectData (System.Runtime.Serialization.SerializationInfo으로 ByVal의 정보, System.Runtime.Serialization.StreamingContext으로 ByVal의 컨텍스트)을 의미하려면이 작업을

http://srtsolutions.com/blogs/billwagner/archive/2006/11/20/xml-serialization-and-generic-interfaces.aspx

1

지금은 테스트 할 시간이 없지만 C#에서는 인터페이스를 확장 할 수 있으므로 VB.NET에서이 작업을 수행 할 수 있다고 가정합니다.

그냥 IAlphabeticListItem 더를 ISerializable

+0

을 만드는 방법에 대한 훌륭한 세부 사항에 간다 내 다른 클래스 각각에서 System.Runtime.Serialization.ISerializable.GetObjectData를 구현합니다! – digiguru

+0

해당 클래스를 구현하는 객체가 이미 ISerializable 인 경우 아무런 문제가 없어야합니다. 다른 한편, 그렇지 않다면 어쨌든 인터페이스를 구현해야하므로 걱정하지 않아도됩니다. – rgargente

관련 문제