2014-02-28 30 views
1

我創建了一個Web服務函數返回一個對象(匿名LINQ結果)匿名回報

[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; 
    } 

,如果我使用Fiddler得到響應,則它返回OK什麼數據我預計

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() 

問題:如何顯示結構+匿名方法的數據轉換成JSON,將在瀏覽器中顯示出這樣

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

或默認XML結果。

預先感謝

+0

可能的重複[從MVC 4 Web Api返回匿名類型失敗並出現序列化錯誤](http://stackoverflow.com/questions/14962134/returning-an-anonymous-type-from -mvc-4-web-api-fails-with-a-serialization-error) – sloth

+0

@DominicKexel我不認爲這是你鏈接的問題的重複。 OP使用的是較早的ASMX Web服務,而不是MVC或Web API。 –

回答

2

錯誤是一個Content-Type報頭。嘗試從Fiddler中的請求中刪除它,你會看到相同的例外。瀏覽器不會發送Content-Type: application/json它,您的webserice會嘗試返回XML序列化對象並失敗。這通常是ASP.NET安全策略。檢查此url以獲取更多信息