Tôi đang cố trả lại một số JSON từ một dịch vụ WCF. Dịch vụ này chỉ trả về một số nội dung từ cơ sở dữ liệu của tôi. Tôi có thể lấy dữ liệu. Tuy nhiên, tôi lo ngại về định dạng JSON của tôi. Hiện tại, JSON được trả lại được định dạng như sau:Làm cách nào để trả lại JSON sạch từ một Dịch vụ WCF?
{"d":"[{\"Age\":35,\"FirstName\":\"Peyton\",\"LastName\":\"Manning\"},{\"Age\":31,\"FirstName\":\"Drew\",\"LastName\":\"Brees\"},{\"Age\":29,\"FirstName\":\"Tony\",\"LastName\":\"Romo\"}]"}
Thực tế, tôi muốn JSON của tôi được định dạng rõ ràng nhất có thể. Tôi tin rằng (tôi có thể không chính xác), rằng cùng một tập hợp các kết quả, được biểu thị bằng JSON rõ ràng, trông giống như vậy:
[{"Age":35,"FirstName":"Peyton","LastName":"Manning"},{"Age":31,"FirstName":"Drew","LastName":"Brees"},{"Age":29,"FirstName":"Tony","LastName":"Romo"}]
Tôi không biết "d" xuất phát từ đâu. Tôi cũng không biết tại sao các ký tự thoát được chèn vào. thực thể của tôi trông giống như sau:
[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;
}
}
Các dịch vụ đó là trách nhiệm trả lại nội dung được định nghĩa là:
[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;
}
}
Làm thế nào để trở về “làm sạch” JSON từ một dịch vụ WCF? Cảm ơn bạn!
SOAP nên trở về XML. Bạn có thể sử dụng một điểm cuối REST để trả về JSON. Hãy xem http://stackoverflow.com/questions/186631/rest-soap-endpoints-for-a-wcf-service/186695#186695 –
Nhân tiện, nếu có ai khác gặp phải điều này và tự hỏi tại sao "d" tài sản là có, nó có để vá một [lỗ hổng JSON] (http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx/). Loại bỏ nó làm cho bạn dễ bị tổn thương một lần nữa. – Alex
@Alex - Lỗ hổng đó phụ thuộc vào việc xác định lại đối tượng mảng, không còn khả thi trong các trình duyệt hiện đại nữa. Xem http://stackoverflow.com/questions/16289894/is-json-hijacking-still-an-issue-in-modern-browsers – Cheeso