{範例} Windows Pass Json to Asp.net
這個範例原始開發環境是 Visual Studio 2010 + .NET Framework 4
主要程序有:
- 透過 DataContractJsonSerializer 將 Json字串 與 物件做序列化與反序列化
- 以 Asp.net 泛型處理程序(*.ashx) 做為介面 <---- 應改要 Restful 才對…
- 模擬消費端採用 Windows 專案進行存取。
實作過程小遇幾個困擾 / Tip,筆記一下:
序列化為 Json,類別要標注 [DataContract]
筆者(鍵生)一開使物標示 [Serializable()],序列化為字串會多出 k__BackingField,查了一下原來也有人遇到相同問題 (stackoverflow)
錯誤如下:
{"<Items>k__BackingField":[{"<Age>k__BackingField":20,"<UserName>k__BackingField":"李小龍"},{"<Age>k__BackingField":30,"<UserName>k__BackingField":"成龍"}]}
修改正確的 [DataContract],正確如下:
{"Items":[{"Age":20,"UserName":"李小龍"},{"Age":30,"UserName":"成龍"}]}
POST 資料沒有Key,Form[0]可以接收全部
將整個字串做為 Request 傳遞的 Content,原本考量是否需要加上一個 Key 才能讓 Server 端接收
value={"Items":[{"Age":20,"UserName":"李小龍"},{"Age":30,"UserName":"成龍"}]}
在 Server 端以Form[“XXXX”] 方式接收值。
string jsonText = context.Request.Form["value"];
不過發現沒有多接 Key , 是可以直接從 Form[0] 接收完整的資料
string jsonText = context.Request.Form[0];
不過傳送資料前需要做 System.Web.HttpUtility.UrlEncode("post data");
必免資料中有 "=" , "+" 等字元,造成接收端收到資料不完整。
Debug 同時啟動多個專案
由於同時不熟悉 Windows Client 撰寫 HttpWebRequest 與 ASP.NET 接收參數的實作細節,Debug 啟動這兩個專案直接看就清楚多了。
原始檔下載: http://files.dotblogs.com.tw/robin/1306/201366145321421.zip