Sto cercando di restituire alcuni JSON da un servizio WCF. Questo servizio restituisce semplicemente alcuni contenuti dal mio database. Posso ottenere i dati. Tuttavia, sono preoccupato per il formato del mio JSON. Attualmente, il JSON che viene restituito è formattato in questo modo:Come restituire JSON pulito da un servizio WCF?
{"d":"[{\"Age\":35,\"FirstName\":\"Peyton\",\"LastName\":\"Manning\"},{\"Age\":31,\"FirstName\":\"Drew\",\"LastName\":\"Brees\"},{\"Age\":29,\"FirstName\":\"Tony\",\"LastName\":\"Romo\"}]"}
In realtà, vorrei che la mia JSON da formattare in modo pulito come possibile. Credo che (io possa essere errato), che lo stesso insieme di risultati, rappresentato in JSON pulita, dovrebbe apparire in questo modo:
[{"Age":35,"FirstName":"Peyton","LastName":"Manning"},{"Age":31,"FirstName":"Drew","LastName":"Brees"},{"Age":29,"FirstName":"Tony","LastName":"Romo"}]
Non ho idea di dove la “d” proviene. Inoltre non ho idea del motivo per cui i caratteri di escape vengono inseriti. Il mio soggetto è simile al seguente:
[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;
}
}
Il servizio che è responsabile della restituzione del contenuto è definito come:
[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;
}
}
Come faccio a restituire “pulito” JSON da un servizio WCF? Grazie!
SOAP deve restituire XML. È possibile utilizzare un endpoint REST per restituire JSON. Date un'occhiata http://stackoverflow.com/questions/186631/rest-soap-endpoints-for-a-wcf-service/186695#186695 –
A proposito, se qualcun altro si imbatte in questo e si chiede perché la "d" la proprietà è lì, è lì per correggere una [vulnerabilità JSON] (http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx/). Rimozione lo rende di nuovo vulnerabile. – Alex
@Alex: la vulnerabilità dipende dalla ridefinizione dell'oggetto Array, che non è più possibile nei browser moderni. Vedi http://stackoverflow.com/questions/16289894/is-json-hijacking-still-an-issue-in-modern-browsers – Cheeso