在第八章我們使用 HTTP 來發送 JSON 文件給 CouchDB 的 API,伺服器端程式就必須解析結構, 做出相對的動作應並回傳結果。 分類伺服器端與用戶端技術分類:
網路上的資料交換格式需要用戶端與伺服器的支援,如果只有用戶端支援沒有伺服器端支援,JSON 會消逝。幸好JSON格式 受大部分伺服器端網路架構與程式語言的支援。若沒有內建 JSON 序列化或反序列化支援,其函式庫或擴充套件也會支援。
序列化:將物件轉化成文字的動作
反序列化:將文字轉化成物件的動作
為解析 JSON ,我們必須使用第三方的 ASP .NET 函式庫,我們使用的函式庫為 Json .Net ,他來至 Newtonsoft 的開源 JSON 架構。
專案透過 Nuget 安裝 JSON .NET。
PM> Install-Package Newtonsoft.Json
ASP .NET C# 中定義 Accousts 型別
public class Account
{
public string firstName {get; set;}
public string lastName {get; set;}
public int age {get; set;}
public Address[] address {get; set;}
}
public class Address
{
public string street {get; set;}
public string city {get; set;}
public string state {get; set;}
public int zip {get; set;}
}
程式中建立新的物件並給定值。
Account myaccount = new Account();
myaccount.firstName = "Bob";
myaccount.lastName = "Barker";
myaccount.age = 91;
Address[] addrsses;
addrsses = new Address[2];
Address myaddress1= new Address();
myaddress1.street="123 fake st";
myaddress1.city="Somewhere";
myaddress1.state="OR";
myaddress1.zip=1234;
addrsses[0] = myaddress1;
Address myaddress2= new Address();
myaddress2.street="456 fake st";
myaddress2.city="Some Place";
myaddress2.state="CA";
myaddress2.zip=9600;
addrsses[1] = myaddress2;
myaccount.Address = addrsses;
最後使用 JSON .NET 函式庫將此物件序列化成 JSON 。
string json = JsonConvert.SerializeObject(myaccount);
物件序列化成 JSON 的結果。
{
"firstName": "Bob",
"lastName" : "Barker",
"age" : 91,
"address" : [
{
"street" : "123 fake st",
"city" : "Somewhere",
"state" : "OR",
"zip" : "97520"
},
{
"street" : "456 fake st",
"city" : "Some Place",
"state" : "CA",
"zip" : "9600"
}
]
}
將前一例的 JSON 字串反序列化,將會被反序列化成 Accousts 型別。
Account account = JsonConvert.DeserializeObject<Account>(json);
重點是我們的物件屬性名稱與 JSON 文件中的名稱-值對的名稱要相符,不然會反序列化失敗。
在ASP .NET 環境中,通常需要輸出 JSON 格式給前端運用,都會使用 WebAPI 的方式開發,因為預設回應的格式自然就是 JSON 了。
參考網站 http://blog.sanc.idv.tw/2012/04/aspnet-mvc-4-web-apihello-web-api.html