Ich versuche, einige JSON von einem WCF-Dienst zurückzugeben. Dieser Dienst gibt einfach einige Inhalte aus meiner Datenbank zurück. Ich kann die Daten bekommen. Ich bin jedoch besorgt über das Format meiner JSON. Derzeit ist die JSON, die wie dies wird zurückgegeben formatiert:Wie gebe ich sauberes JSON von einem WCF-Dienst zurück?
{"d":"[{\"Age\":35,\"FirstName\":\"Peyton\",\"LastName\":\"Manning\"},{\"Age\":31,\"FirstName\":\"Drew\",\"LastName\":\"Brees\"},{\"Age\":29,\"FirstName\":\"Tony\",\"LastName\":\"Romo\"}]"}
In Wirklichkeit würde ich meine JSON gerne so sauber wie möglich formatiert werden. Ich glaube (ich könnte falsch sein), dass die gleiche Sammlung von Ergebnissen, in sauberen JSON dargestellt, wie so aussehen sollte:
[{"Age":35,"FirstName":"Peyton","LastName":"Manning"},{"Age":31,"FirstName":"Drew","LastName":"Brees"},{"Age":29,"FirstName":"Tony","LastName":"Romo"}]
Ich habe keine Ahnung, wo die „d“ herkommt. Ich habe auch keine Ahnung, warum die Escape-Zeichen eingefügt werden. Meine Einheit sieht wie folgt aus:
[DataContract]
public class Person
{
[DataMember]
public string FirstName { get; set; }
[DataMember]
public string LastName { get; set; }
[DataMember]
public int Age { get; set; }
public Person(string firstName, string lastName, int age)
{
this.FirstName = firstName;
this.LastName = lastName;
this.Age = age;
}
}
Der Dienst, der für die Rücksendung den Inhalt verantwortlich ist, wird wie folgt definiert:
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class TestService
{
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json)]
public string GetResults()
{
List<Person> results = new List<Person>();
results.Add(new Person("Peyton", "Manning", 35));
results.Add(new Person("Drew", "Brees", 31));
results.Add(new Person("Tony", "Romo", 29));
// Serialize the results as JSON
DataContractJsonSerializer serializer = new DataContractJsonSerializer(results.GetType());
MemoryStream memoryStream = new MemoryStream();
serializer.WriteObject(memoryStream, results);
// Return the results serialized as JSON
string json = Encoding.Default.GetString(memoryStream.ToArray());
return json;
}
}
Wie kann ich zurückkehren „reinigen“ JSON aus einem WCF-Dienst? Vielen Dank!
SOAP XML zurückgeben sollte. Sie können einen REST-Endpunkt verwenden, um JSON zurückzugeben. Werfen Sie einen Blick auf http://StackOverflow.com/questions/186631/rest-soap-endpoints-for-a-wcf-service/186695#186695 –
Übrigens, wenn jemand anderes darüber stößt und fragt sich, warum das "d" Eigentum ist da, es ist da, um eine [JSON-Schwachstelle] zu patchen (http://haacked.com/archive/2008/11/20/anatomy-of-a-subltle-json-vulnerability.aspx/). Wenn du es entfernst, bist du wieder verwundbar. – Alex
@Alex - diese Sicherheitslücke hängt davon ab, das Array-Objekt neu zu definieren, was in modernen Browsern nicht mehr möglich ist. Siehe http://stackoverflow.com/questions/16289894/is-json-hijacking-still-an-issue-in-moder-browsers – Cheeso