Hallo Forum,
ich soll einen schon bestehenden asp.net 3.5 WebService (WebDienst Projekt) dazu bewegen valide JSON-Results auf GET und Post Request zurückzugeben.
Ich habe dazu den WebService als ScriptEnabled deklariert. Anschließend habe ich alle Methoden mit dem Attribut[ScriptMethod(ResponseFormat = ResponseFormat.Json)] ausgestattet.
In der Methode serialisiere ich dann das Ergebnis mit
JavaScriptSerializer js = new JavaScriptSerializer();
string strJSON = js.Serialize(peopleCollection);
return strJSON;
Ich bin davon ausgegangen, dass der Service nun valides JSON zurückgibt. Allerdings habe ich nun die Antwort erhalten, dass es eine Mischung aus xml und JSON ist.
Schaue ich mir das Result im Browser an sehe ich folgendes:
[{"Id":1,"Name":"Peter"},{"Id":2,"Name":"Paul"},{"Id":3,"Name":"Steffi"}]
Für mich sieh das nach einem JSON-Array aus. Hattet ihr auch schon einmal diese Anforderung und wo hattet ihr Fallstricke? Wie könnte ich das Problem lösen?
Hi,
ich bin leider nicht so sehr überzeugt von der Code-Qualität bei der Verwendung von Json und bin wieder zurück zu PartialViews gegangen. Ich ersetze ganze (Div-)Blöcke. Zusätzlich sehe ich immer einen zusätzlichen Programmieraufwand bei der Nutzung von Json, den ich gerne vermeiden möcht.
Rein von der Syntax sehe ich jedoch kein Problem in Deinem Json-Result - es ist auch garantiert kein XML. Wie sollte Dein Resultat Deiner Vorstellung nach aussehen?
Wieso nutz Du nicht JsonResult als Rückgabetyp anstatt hier einen manuellen Serializer?
Ich glaube du verwechsest da was. Ich rede nicht von einem MVC Projekt, sondern von einem WebService.
Ich habe mir nun das Result noch einmal genauer angesehen.
<?xml version="1.0" encoding="utf-8" ?>
<string xmlns="http://www.testdomain.de/Data">[{"Id":1,"Name":"Peter"},{"Id":2,"Name":"Paul"},{"Id":3,"Name":"Steffi"}]
Problem: Nicht nur die xml Notation ist unerwünscht auch ist dies kein gültiges JSON Objekt.
Oh tatsächlich. Ich hab das Webservice völlig überlesen.
SOAP-Dienste geben eigentlich immer XML-Zurück, siehe Dein Resultat.
Wenn ich's richtig weiß müsste aber folgendes funktionieren:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public void FunctionsName( )
{
Object obj = new Object ( );
JavaScriptSerializer js = new JavaScriptSerializer( );
string str = js.Serialize( obj );
Context.Response.Clear();
Context.Response.ContentType = "application/json";
Context.Response.AddHeader( "content-disposition", "attachment; filename=export.json" );
Context.Response.AddHeader( "content-length", str.Length.ToString( ) );
Context.Response.Flush( );
Context.Response.Write( str );
}
Hallo,
wenn ich das richitg sehe wäre das was für WCF/REST. Ab .net 4.0 gibts dazu Framework-Unterstützung, davor gibts das WCF REST Starter Kit.
Dort kann als ResponseFormat JSON eingestellt werden.
mfG Gü
@gfoidl: Leider kann kein WCF verwendet werden, da es sich um ein schon bestehendes Projekt auf .net 3.5 Basis handelt, dass nur weitert werdern soll.
@Abt. ich werde es gleich mal ausprobieren.
Ich habe es nun ausprobiert. So ganz zu funktionieren scheint es nicht. Zum einen wird mir nun eine "*.json" Datei zum Download angeboten. Und der Inhalt in dieser Datei ist abgeschnitten. Aber grundsätzlich schonmal ohne xml-Notation.
Konsumierst Du das Ergebnis mit jQuery? Wenn ja dann setz mal den datatype auf json.
Nein ich, bzw. die Gegenstelle konsumiert nicht mit jquery. Mir reicht, wenn die xml-Notation weg ist. Alles was dazwischen steht scheint ja valides json zu sein.