2013-04-08 56 views
0

我在asp.net上开发了一个web服务,我希望它返回一个json字符串而不是xml文件。我已经在我的代码中设置了以下内容,并通过互联网上的多个来源进行查看,并且我尝试了但是“错误”不断出现。Webservice返回xml而不是json如何解决?

dao.asmx

[WebMethod] 
     [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
     public string getLosKPIDataYear() 
     { 
      List<Object> sqlObject = new List<Object>(); 
      String connectionString = DAO.GetConnectionString(); 
      string sqlQuery = string.Empty; 
      var serializer = new JavaScriptSerializer(); 
      serializer.MaxJsonLength = Int32.MaxValue; 
      SqlConnection sqlConn = new SqlConnection(connectionString); 

      try 
      { 
       sqlQuery = "select LOSYearYear, LOSYearLOS from LOSYear"; 
       sqlConn.Open(); 
       SqlDataReader reader = null; 
       SqlCommand sqlCommand = new SqlCommand(sqlQuery, sqlConn); 
       reader = sqlCommand.ExecuteReader(); 


       while (reader.Read()) 
       { 
        sqlObject.Add(new { LOSYearYear = reader["LOSYearYear"].ToString(), LOSYearLOS = reader["LOSYearLOS"].ToString() }); 

}}

catch (Exception e) 
      { 
       Console.WriteLine(e.ToString()); 
      } 

      sqlConn.Close(); 
      var resultData = new { e = sqlObject.ToArray() }; 
      ContentResult result = new ContentResult(); 
      result.Content = serializer.Serialize(resultData); 
      result.ContentType = "application/json"; 
      String myResult = result.Content; 
      return myResult; 
     } 

的web.config

 <webServices> 
      <protocols> 
      <add name="HttpGet"/> 
      <add name="HttpPost"/> 

      </protocols> 
     </webServices> 

<system.webServer> 
    <handlers> 
     <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
    </handlers> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    <staticContent> 
     <mimeMap fileExtension=".svg" mimeType="image/svg+xml" /> 
    </staticContent> 
    </system.webServer> 

我应该怎么做才能解决这个问题?提前致谢!

+0

我可以建议你切换到WCF服务?开始实施/使用RESTful服务有一个很好的例子。使用WCF你不需要做任何你自己的序列化。 http://msdn.microsoft.com/en-us/magazine/dd315413.aspx – 2013-04-08 09:11:13

回答

0

试试这个

var JsonString = ....; 
$.ajax({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    url: "YourWebServiceName.asmx/yourmethodname", 
    data: "{'TheData':'" + JsonString + "'}", 
    dataType: "json", 
    success: function (msg) { 
     var data = msg.hasOwnProperty("d") ? msg.d : msg; 
     OnSucessCallBack(data); 
    }, 
    error: function (xhr, status, error) { 
     alert(xhr.statusText); 
    } 
}); 

function OnSuccessCallData(DataFromServer) { 
// your handler for success  
} 

Webservice的代码: -

using System.Web.Services; 
using System.Web.Script.Serialization; 

    [System.Web.Script.Services.ScriptService] 
    public class YourWebServiceName : System.Web.Services.WebService 
    { 
     [WebMethod] 
     public string yourmethodname(string TheData) 
     { 
      JavascriptSerializer YourSerializer = new JavascriptSerializer(); 
      // custom serializer if you need one 
      YourSerializer.RegisterConverters(new JavascriptConverter [] { new YourCustomConverter() }); 

      //deserialization 
      TheData.Deserialize(TheData); 

      //serialization 
      TheData.Serialize(TheData); 
     } 
    } 
+0

试试这个[ScriptMethod(ResponseFormat = ResponseFormat.Json)] – Darshan 2013-04-08 08:41:14

+0

我已经尝试了上述建议,但它仍然无法正常工作。 – Spencer 2013-04-08 08:47:46

+0

试试这个 Darshan 2013-04-08 08:49:57

相关问题