[範例]Windows Pass Json to Asp.net

  • 1340
  • 0
  • 2013-06-10

[範例]Windows Pass Json to Asp.net
(1) 透過 DataContractJsonSerializer 將 Json字串 與 物件做序列化與反序列化
(2) 以 Asp.net 泛型處理程序(*.ashx) 做為介面
(3) 模擬消費端採用 Windows 專案進行存取。

這個範例原始開發環境是 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 啟動這兩個專案直接看就清楚多了。

 

原始檔下載: https://dotblogsfile.blob.core.windows.net/user/robin/1306/201366145321421.zip