Saya mencoba mengembalikan beberapa JSON dari layanan WCF. Layanan ini hanya mengembalikan beberapa konten dari basis data saya. Saya bisa mendapatkan datanya. Namun, saya khawatir tentang format JSON saya. Saat ini, JSON yang akan dikembalikan diformat seperti ini:
{"d":"[{\"Age\":35,\"FirstName\":\"Peyton\",\"LastName\":\"Manning\"},{\"Age\":31,\"FirstName\":\"Drew\",\"LastName\":\"Brees\"},{\"Age\":29,\"FirstName\":\"Tony\",\"LastName\":\"Romo\"}]"}
Pada kenyataannya, saya ingin JSON saya diformat sebersih mungkin. Saya percaya (saya mungkin salah), bahwa kumpulan hasil yang sama, diwakili dalam JSON bersih, akan terlihat seperti ini:
[{
"Age": 35,
"FirstName": "Peyton",
"LastName": "Manning"
}, {
"Age": 31,
"FirstName": "Drew",
"LastName": "Brees"
}, {
"Age": 29,
"FirstName": "Tony",
"LastName": "Romo"
}]
Saya tidak tahu dari mana "d" berasal. Saya juga tidak tahu mengapa karakter escape dimasukkan. Entitas saya terlihat seperti berikut:
[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;
}
}
Layanan yang bertanggung jawab untuk mengembalikan konten didefinisikan sebagai:
[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;
}
}
Bagaimana cara mengembalikan JSON "bersih" dari layanan WCF? Terima kasih!
Jawaban:
Ubah tipe pengembalian GetResults Anda menjadi
List<Person>
.Hilangkan kode yang Anda gunakan untuk membuat serial daftar untuk string json - WCF melakukan ini untuk Anda secara otomatis.
Menggunakan definisi Anda untuk kelas Person, kode ini berfungsi untuk saya:
hasil:
(Semua dalam satu baris)
Saya juga menggunakan atribut ini pada metode:
WebInvoke dengan Metode = "GET" sama dengan WebGet, tetapi karena beberapa metode saya POST, saya menggunakan semua WebInvoke untuk konsistensi.
UriTemplate menetapkan URL tempat metode ini tersedia. Jadi saya bisa melakukan GET
http://myserver/myvdir/JsonService.svc/players
dan berfungsi.Periksa juga IIRF atau penulis ulang URL lain untuk menyingkirkan .svc di URI.
sumber
Jika Anda ingin json yang bagus tanpa atribut hardcoding ke dalam kelas layanan Anda,
gunakan
<webHttp defaultOutgoingResponseFormat="Json"/>
dalam konfigurasi perilaku Andasumber
Ini dilakukan di web.config untuk layanan web Anda. Atur bindingBehavior ke <webHttp> dan Anda akan melihat JSON bersih. Ekstra "[d]" diatur oleh perilaku default yang perlu Anda timpa.
Lihat juga blogpost ini: http://blog.clauskonrad.net/2010/11/how-to-expose-json-endpoint-from-wcf.html
sumber
Saya menghadapi masalah yang sama, dan menyelesaikannya dengan mengubah nilai atribut BodyStyle menjadi "WebMessageBodyStyle.Bare":
Objek yang dikembalikan tidak akan lagi dibungkus.
sumber
Ketika Anda menggunakan Metode GET, kontrak harus seperti ini.
dengan ini kita memiliki json tanpa parameter boot
Aldo Flores @alduar http://alduar.blogspot.com
sumber
Di IServece.cs Anda tambahkan tag berikut: BodyStyle = WebMessageBodyStyle.Bare
sumber