2017-08-22 1 views
0

Ich habe viele verschiedene Varianten gesucht und gelesen und ausprobiert, um sicherzustellen, dass das lästige {"d": null} nicht an das Ende angehängt wird meine JSON Antwort, aber ich bin ratlos. Ich habe ein .asmx Web-Dienst, der die Context.Response.Write Methode macht nutzt etwa so:{"d": null} zeigt nach JSON Antwort von ASMX Web Service

  DataTable products = my_source; 

      string jsonResponse = JsonConvert.SerializeObject(products);//, Formatting.None, new JsonSerializerSettings { ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore}); 

      this.Context.Response.Clear(); 
      this.Context.Response.ContentType = "application/json; charset=utf-8"; 

      this.Context.Response.Write(jsonResponse); 
      HttpContext.Current.ApplicationInstance.CompleteRequest(); 

Ich habe versucht, auch Flush() zu verwenden, nach dem Schreib ohne Erfolg. Das würde nur den JSON zurückgeben, aber auch eine Fehlermeldung, die nach dem Senden der Header nicht gelöscht werden kann. Ich habe Write.End() anstelle von CompleteRequest verwendet, und das würde auch die] von der JSON-Antwort abgeschnitten. Anstatt Context.Response.Write zu verwenden, würde ich eine Zeichenfolge zurückgeben, die jedoch auch die] Klammer am Ende der JSON-Antwort verlässt.

Meine Methode Attribute sind wie folgt:

[WebMethod] 
    [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] 

ich den Dienst mit einer einfach Ajax-Request aufrufen:

 $.ajax({ 
      url : '/ProductCatalog/ProductMasterWS.asmx/GetProducts', 
      type : 'GET', 
      contentType: 'application/json; charset=utf-8', 
      dataType: 'json', 
      success: function (data) { 
       populate(data); 
      }, 
      error: function(xhr, ajaxOptions, thrownError) { 
       console.log(xhr.status + " " + thrownError.stack); 
      } 
     }); 

Irgendwelche Ideen/Beratung ist sehr zu schätzen!

Antwort

1

Implementieren Sie Ihren Webdienst nicht so, sondern geben Sie nur ein POCO-Objekt zurück, das Ihre Antwort von der Webmethode enthält. ASMX kümmert sich um den Rest für Sie.

+0

Wenn ich eine Zeichenfolge zurück, automatisch ASP.NET fügt diese um meine Antwort. Ich brauche eine einfache JSON-Antwort. Wie kann ich das erreichen? – Jay

+0

Was ist mit der Rückgabe eines POCO-Objekts? Es sollte automatisch serialisiert werden, wenn Sie die Antwort auf JSON festlegen. –

+0

Ich habe versucht, eine Liste zurückzugeben, jedoch wird sie nicht in ein JSON-Objekt serialisiert und macht die Rückgabe noch komplizierter. ... Jay

0

diese Lösung auf Serverseite Versuchen:

[WebMethod] 
public void Select() 
{ 
    String result = String.Empty; 
    List<UserRole> userRoles = new UserRoleController().Select(new UserRole()); 
    JavaScriptSerializer js = new JavaScriptSerializer(); 
    result = js.Serialize(userRoles); 

    Context.Response.Clear(); 
    Context.Response.ContentType = "application/json; charset=utf-8"; 
    Context.Response.Write(result); 
} 
Verwandte Themen