2014-02-28 2 views
1

나는 내가 응답을 얻을 수 피들러를 사용하는 경우익명 반환

[WebMethod] 
    [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] 
    public object GetUser() 
    { 
     List<string> users = new List<string> 
     { 
      "Nora Aunor", 
      "Pilita Corrales" 
     }; 

     var result = users.Select(u => new 
      { 
       Name = u, 
       Birthdate = DateTime.Now 
      }) 
      .ToList(); 

     var retVal = new 
     { 
      Data = result, 
      Count = result.Count 
     }; 

     return retVal; 
    } 

, 그것은 내가

을 기대했던 데이터를 확인 반환하는 개체를 반환하는 웹 서비스 기능 (익명 LINQ 결과를) 생성

enter image description here

하지만 난 브라우저를 사용하는 경우, 그냥 오류

System.InvalidOperationException: There was an error generating the XML document. ---> System.InvalidOperationException: &lt;&gt;f__AnonymousType2`2[System.Collections.Generic.List`1[&lt;&gt;f__AnonymousType1`2[System.String,System.DateTime]],System.Int32] cannot be serialized because it does not have a parameterless constructor. 
    at System.Xml.Serialization.TypeDesc.CheckSupported() 
    at System.Xml.Serialization.TypeScope.GetTypeDesc(Type type, MemberInfo source, Boolean directReference, Boolean throwOnError) 
    at System.Xml.Serialization.XmlSerializationWriter.CreateUnknownTypeException(Type type) 
    at System.Xml.Serialization.XmlSerializationWriter.WriteTypedPrimitive(String name, String ns, Object o, Boolean xsiType) 
    at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write1_Object(String n, String ns, Object o, Boolean isNullable, Boolean needType) 
    at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write3_anyType(Object o) 
    at Microsoft.Xml.Serialization.GeneratedAssembly.ObjectSerializer1.Serialize(Object objectToSerialize, XmlSerializationWriter writer) 
    at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id) 
    --- End of inner exception stack trace --- 
    at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id) 
    at System.Xml.Serialization.XmlSerializer.Serialize(TextWriter textWriter, Object o, XmlSerializerNamespaces namespaces) 
    at System.Web.Services.Protocols.XmlReturnWriter.Write(HttpResponse response, Stream outputStream, Object returnValue) 
    at System.Web.Services.Protocols.HttpServerProtocol.WriteReturns(Object[] returnValues, Stream outputStream) 
    at System.Web.Services.Protocols.WebServiceHandler.WriteReturns(Object[] returnValues) 
    at System.Web.Services.Protocols.WebServiceHandler.Invoke() 
을 반환 691,363,210

질문 : 방법이

{ 
    "d": { 
     "Data": [{ 
      "Name": "Nora Aunor", 
      "Birthdate": "\/Date(1393578983512)\/" 
     }, 
     { 
      "Name": "Pilita Corrales", 
      "Birthdate": "\/Date(1393578983512)\/" 
     }], 
     "Count": 2 
    } 
} 

하거나 기본 XML 결과처럼 브라우저에 표시됩니다 JSON에 구조 + 익명 메소드의 데이터를 표시합니다. 사전에

감사

+0

가능한 복제본 [MVC 4 웹 API에서 익명 유형 반환하기가 직렬화 오류로 실패합니다.] (http://stackoverflow.com/questions/14962134/returning-an-anonymous-type-from -mvc-4-web-api-serialization-errors와 함께 실패 함) – sloth

+0

@DominicKexel이 링크가 링크 된 질문과 중복되는 것 같지 않습니다. OP는 MVC 또는 웹 API가 아닌 이전 ASMX 웹 서비스를 사용합니다. –

답변

2

오류는 Content-Type 헤더입니다. Fiddler에서 요청을 제거하려고하면 같은 예외가 표시됩니다. 브라우저가 Content-Type: application/json을 보내지 않으며 웹 서버가 XML 직렬화 된 객체를 반환하려고 시도하고 실패합니다. 이것은 일반적으로 ASP.NET 보안 정책입니다. 이 부분을 확인하십시오. url 자세한 정보는

관련 문제