2012-05-11 2 views
0

WCF 서비스 참조에 정의 된 상당히 복잡한 개체 RequestList은 동일한 서비스 참조의 메서드에 대한 입력 매개 변수입니다. XML은 이미 클라이언트 측에서 생성되었으므로 우리가해야 할 일은 객체를 XmlSerialize 한 다음 클라이언트 측 XML을 deserialize하는 것입니다. 지정된 유형의 새 XmlSerializer을 만들려고하면 예외가 throw됩니다.서비스 참조 개체 직렬화되지 않음

Unable to generate a temporary class (result=1). 
error CS0030: Cannot convert type 'ServiceReference.Parameter[]' 
    to 'ServiceReference.Parameter' 
error CS0029: Cannot implicitly convert type 'ServiceReference.Parameter' 
    to'ServiceReference.Paramter[]' 

이 배열은 쉽게 직렬화해야하지 :

XmlSerializer serializer = new XmlSerializer(typeof(RequestList)); 

는 InvalidOperationException이를 던져? 이 오류가 발생하는 이유는 무엇입니까? 어떻게 해결할 수 있습니까?

+3

은 RequestList의 정의, 특히 매개 변수 [] 필드/속성을 붙여 넣을 수 있습니다. –

+0

실패한 이유 중 하나 일 수 있으므로 원형 참조를 포함하도록 개체를 확인 했습니까? 또한 코드를 시도하십시오 XmlSerializer ser = new XmlSerializer(); ser.Serialize (obj, stream); xml 문자열이 스트림에서 읽으려는 경우 – Rajesh

답변

0

문제점을 발견했습니다. 분명히 어떤 종류의 버그가 있습니다. RequestList 클래스의 정의에는 double 배열 Parameter[][]이있는 매개 변수가있었습니다. 분명히 그 원인을 일으킨다. 해결 방법은 배열을 단일 배열로 만드는 것입니다 : Parameter[]. 일단 내가 이것을하면 완벽하게 작동합니다.

0

여기의 문제는 버그 또는 무언가와 직접적인 관련이 없다고 생각합니다. 아마도 객체를 사용하고 있거나 객체가 xml serialization을 사용하여 직렬화 할 수없는 속성을 가지고 있습니다. 예를 들어 Dictionary<T>은 직접 직렬화 할 수 없습니다. 그것은 오류를 준다; xml serialization에서 Dictionary<T>을 사용하려면 사전을 상속 받아 IXmlSerializable 인터페이스를 구현해야합니다.

당신이 다른 쪽에서 직렬화하려고하는 것을 모르기 때문에 이것은 그렇지 않을 수도 있습니다.

+0

사전이 없습니다. int, bool, double, decimal 및 DateTime 유형의 매우 큰 구조. DateTime 유형은 직렬화 가능합니다. 맞습니까? – SaulBack