2014-05-23 6 views
0

웹 서비스에서 호출하는 다음 메소드가 있습니다. "매개 변수없는 생성자가 없으므로 직렬화 할 수 없습니다."라는 오류 메시지가 계속 나타납니다.Webservice - 매개 변수없는 생성자가 없기 때문에 직렬화 할 수 없습니다.

[WebMethod] 
    public ArrayList GetPayers() 
    { 
     string PROVIDER_JSON = ""; 

     ArrayList list = new ArrayList(); 
     using (var webClient = new System.Net.WebClient()) 
     { 
      PROVIDER_JSON = webClient.DownloadString("https://www.eligibleapi.com/resources/information-sources.json"); 

      List<EligibleProviderType2> UserList = JsonConvert.DeserializeObject<List<EligibleProviderType2>>(PROVIDER_JSON); 

      for (int i = 0; i < UserList.Count; i++) 
      { 
       foreach (string inventoryItem in UserList[i].PayerName) 
       { 
        list.Add(new 
        { 
         PayerID = UserList[i].PayerID, 
         PayerName = inventoryItem 
        }); 
       } 
      } 

      return list; 
     } 
    } 

매개 변수없는 생성자가 있다고 생각되는 클래스를 호출하는 클래스는 무엇입니까?

[JsonObject(MemberSerialization.OptIn)] 
public class EligibleProviderType2 
{ 
    EligibleProviderType2(){} 

    [JsonProperty(PropertyName = "payer_id")] 
    public string PayerID { get; set; } 

    [JsonProperty(PropertyName = "names")] 
    public IList<string> PayerName { get; set; } 

} // EligibleProvider 
+0

ASMX는 기존 기술이므로 새로운 개발에 사용하면 안됩니다. 웹 서비스 클라이언트와 서버의 모든 새로운 개발에는 WCF 또는 ASP.NET 웹 API를 사용해야합니다. 한 가지 힌트 : Microsoft는 MSDN에서 [ASMX 포럼] (http://social.msdn.microsoft.com/Forums/en-US/asmxandxml/threads)을 퇴역 시켰습니다. –

답변

2

생성자를 공개로 설정하십시오. 직렬화 코드에서이를 볼 수 없습니다.

2

EligibleProviderType2의 생성자가 private 인 것 같습니다. 비공개는 클래스 필드 및 메서드의 기본값입니다. (컴파일러가 생성하기 때문에 컴파일러가 다음과 같이 변경하므로) 제거하거나 다음과 같이 변경하십시오.

[JsonObject(MemberSerialization.OptIn)] 
public class EligibleProviderType2 
{ 
    public EligibleProviderType2(){} 

    [JsonProperty(PropertyName = "payer_id")] 
    public string PayerID { get; set; } 

    [JsonProperty(PropertyName = "names")] 
    public IList<string> PayerName { get; set; } 
} // EligibleProvider 
+0

두 번째 블록을 복사하여 붙여 넣은 채 계속 가져 와서 미친 듯이 몰아 넣었습니다. 이제 Public EligibleProviderType2() {} – user3670015

+0

흠 ... 전체 오류 메시지는 무엇이라고 말합니까? –

+0

System.InvalidOperationException : XML 문서를 생성하는 동안 오류가 발생했습니다. ---> System.InvalidOperationException : < > f__AnonymousType0'2 [System.String, System.String] 매개 변수없는 생성자가 없기 때문에 직렬화 할 수 없습니다. < > f__AnonymousType0'2 [: System.Xml.Serialization.TypeScope.GetTypeDesc (종류 형, MemberInfo가 소스, 부울 directReference, 부울 throwOnError) 에서 는 System.Xml.Serialization.XmlSerializationWriter.CreateUnknownTypeExcep – user3670015