在C#開發(fā)中,WCF是非常常用的一種Web Service框架。而在進(jìn)行Web Service的數(shù)據(jù)交互時(shí),JSON是一種非常常見的數(shù)據(jù)格式。通過WCF和JSON,我們可以非常方便地實(shí)現(xiàn)跨平臺(tái)、跨語言的數(shù)據(jù)交互。本文主要介紹在WCF中如何處理JSON對(duì)象。
[DataContract] public class Person { [DataMember] public string Name { get; set; } [DataMember] public int Age { get; set; } } [ServiceContract] public interface IPersonService { [OperationContract] [WebInvoke(Method = "POST", UriTemplate = "GetPerson", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] Person GetPerson(Person person); }
在上面的代碼中,我們定義了一個(gè)Person類,并在服務(wù)契約接口IPersonService中定義了一個(gè)GetPerson方法,該方法接收一個(gè)Person對(duì)象,并將其作為Json格式的參數(shù)進(jìn)行POST請(qǐng)求,并返回一個(gè)Person對(duì)象。
{"uri":"http://localhost:8080/PersonService.svc/GetPerson", "requestBody":{"Name":"Tom", "Age":18}}
在客戶端調(diào)用該服務(wù)的過程中,我們需要將Person對(duì)象轉(zhuǎn)換為JSON格式的數(shù)據(jù),并將其作為請(qǐng)求參數(shù)進(jìn)行傳輸。比如,通過HttpWebRequest進(jìn)行請(qǐng)求:
Person person = new Person() { Name = "Tom", Age = 18 }; string url = "http://localhost:8080/PersonService.svc/GetPerson"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; string postData = "{\"Name\":\"" + person.Name + "\",\"Age\":" + person.Age + "}"; byte[] data = Encoding.UTF8.GetBytes(postData); request.ContentType = "application/json"; request.ContentLength = data.Length; using (Stream stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } string content; using (WebResponse response = request.GetResponse()) using (Stream stream = response.GetResponseStream()) using (StreamReader reader = new StreamReader(stream)) { content = reader.ReadToEnd(); } Person result = JsonConvert.DeserializeObject(content);
在客戶端將請(qǐng)求結(jié)果反序列化時(shí),我們需要使用JsonConvert類提供的方法將JSON格式的數(shù)據(jù)轉(zhuǎn)換為對(duì)應(yīng)類型的對(duì)象。
通過WCF和JSON,我們可以非常方便地實(shí)現(xiàn)跨平臺(tái)、跨語言的數(shù)據(jù)交互。在開發(fā)過程中,需要注意序列化和反序列化的方式,以及參數(shù)和返回值的定義。