Pages

{範例} Windows Pass Json to Asp.net

Jun 10, 2013

這個範例原始開發環境是 Visual Studio 2010  + .NET Framework 4

主要程序有:

  1. 透過 DataContractJsonSerializer 將 Json字串 與 物件做序列化與反序列化
  2. 以 Asp.net 泛型處理程序(*.ashx) 做為介面 <---- 應改要 Restful 才對…
  3. 模擬消費端採用 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 同時啟動多個專案



SNAGHTML5cb3c6



由於同時不熟悉 Windows Client 撰寫 HttpWebRequest 與 ASP.NET 接收參數的實作細節,Debug 啟動這兩個專案直接看就清楚多了。



 



原始檔下載: http://files.dotblogs.com.tw/robin/1306/201366145321421.zip