Webservice返回xml而不是json如何解决?

时间:2013-04-08 08:38:15

标签: c# asp.net

我在asp.net上开发了一个web服务,我希望它返回一个json字符串而不是xml文件。我在我的代码中设置了以下内容并在互联网上查看了多个来源,我尝试了但是“错误”一直出现。

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>

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

1 个答案:

答案 0 :(得分: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);
        }
    }