2013-11-21 3 views
0

두 개의 클래스가있는 WCF를 DataContracts로 개발하고 있습니다. 그 중 하나는 JSON으로 객체를 관리하는 나 자신에 의해 개발 된 데이터 구조입니다. 이름은 JSON입니다. 다른 하나는 내 WebService가 수신하는 사용자 정의 된 객체입니다. 이름은 배출입니다. 세 가지 방법이 있습니다. 하나는 정책 작성을위한 것이고 다른 하나는 정책을 검색하고 마지막 하나는 JSON 클래스를 사용하여 역동적 인 방식으로 카탈로그를 참조합니다. 메시지를 역 직렬화하는 동안 "포맷터는 예외가 발생했습니다 List 유형의 속성 이 DataContract 클래스에서 실패합니다.

: 매개 변수를 역 직렬화하는 동안 오류가 발생했습니다 ...의 InnerException 메시지가 '1 개 행 위치에서 오류가 발생했습니다 내 문제는이 같은 오류 메시지가 내 온다 요소 ... 에는 ' http://schemas.microsoft.com/2003/10/Serialization/Arrays:ArrayOfanyType' 데이터 계약의 데이터가 포함되어 있습니다. 디시리얼라이저에는이 계약서에 매핑되는 형식에 대한 지식이 없습니다. 알려진 유형 목록에 'ArrayOfanyType'에 해당하는 유형 추가 - for 예 : KnownTypeAttribute 특성을 사용하거나 DataContractSerializer에 전달 된 알려진 형식 목록에 추가하여.
자세한 내용은 InnerException을 참조하십시오. "

답변을 찾다가 내 문제의 원인이 제네릭 객체 목록 인 JSON 클래스의 속성임을 알게되었습니다. 내 클라이언트에서이 속성을 필요로하는 객체를 초기화해야하므로이 목록에 문자열이나 다른 객체 목록이 포함될 수 있으므로 이러한 종류의 항목이 필요합니다.

나는 어떤 성공 KnownTypes의 종류를 사용하려했지만 내가 뭔가 잘못하고 있어요 모르겠어요

[KnownType(typeof(Object[]))] 
[KnownType(typeof(List<List<Object>>))] 
[KnownType(typeof(List<object>))] 
[KnownType(typeof(List<string>))] 
[KnownType(typeof(List<List<string>>))] 

이 말을하는 것이 중요하다 만약 내가 SET 속성 내부 속성은 표시되지 않지만 모든 것이 클라이언트 측의 JSON 클래스에서도 잘됩니다. 내 코드의 파쇄를 첨부 :

public class JSON 
{ 
    #region 
    [DataMember] 
    public List<Object> value { get; set; } This cause the problem 
    //public List<Object> value { get; internal set; } This allow everything happens fine 
    [DataMember] 
    public List<string> errors { get; set; } 
    [DataMember] 
    public Regex pattern { get; internal set; } 
    [DataMember] 
    internal Regex commaPattern { get; private set; } 
    #endregion 
} 

[ServiceContract(Namespace = "http://EmissionService")] 
public interface IEmissionService 
{ 
    [OperationContract] 
    [WebGet(UriTemplate = "Emissions/getCatalog", ResponseFormat = WebMessageFormat.Json)] 
    string getCatalog(JSON request); 

    [OperationContract] 
    [WebInvoke(UriTemplate = "Emissions/createPolicy", ResponseFormat = WebMessageFormat.Json, Method = "POST")] 
    string createPolicy(Emission emissionRequest); 

    [OperationContract] 
    [WebGet(UriTemplate = "Emissions/getPolicy", ResponseFormat = WebMessageFormat.Json)] 
    JSON getPolicy(JSON request); 
} 

을 난 당신이 정말 나를 도울 수 있기를 바랍니다. 덕분에 조언을!

+0

'[KnownType (typeof (List ))]]이 (가) 표시되지 않는 이유는 무엇입니까? –

+0

음 ... 대문자가있는 객체를 의미합니까? 사실 나는 둘 다 시도했다. – user3018905

답변

0

주위에 배열보다는 데이터 계약의 목록과 적절하게 서비스 ToArray()ToList()를 사용을 사용할 수있는 가능한 랩.

0

object-list에 포함될 수있는 모든 유형은 직렬화가 작동하려면 컴파일러에서 알아야합니다.

관련 문제