Silverlight不寫實體類也能顯示數據呵呵


開篇

      在任何的BS項目的開發中,怎么把后台的數據展示到前端,都是無法避免的甚至有時候讓人頭疼的問題。考慮到這點,Silverlight中微軟給予了我們Binding這一偉大的特性。借助他,讓我們可以用非常優雅的方式處理數據的展示.....。我們知道,Binding是溝通Xaml和數據源的橋梁,而大部分時候,我們的數據源都是一個實體類實例或者實體類實例集合。故在我們潛意識里,要展示一份數據,幾乎必須寫實體類不可。本文的目的就是使用一種‘巧妙的方式’,讓我們不寫實體類也可以Bingding.....從而顯示數據。

准備

   我們的目的非常簡單,寫一個方法,傳入字符串的JSON數據,讓DataGrid顯示數據。Json數據如下。特別注意該JSON格式。JSON數據如下。

View Code
[
    {
        "PersonAidsID": "ff9619ff-8b46-d011-b42d-00c04fc934f1",
        "IDNum": "594832934875849485",
        "Sex": "1",
        "RecordTime": "2012/2/28 10:29:34",
        "Address": "合額度126號",
        "Name": "陳-冠-希是你",
        "Age": "34",
        "GeographicLocation": "43.887594849178,81.3012265555597",
        "IllnessNarratives": "2",
        "得病類型": "",
        "民族": "",
        "吸毒史": "",
        "VillageID": "ff9619ff-8b46-d011-b42d-00c04fc934f6"
    },
    {
        "PersonAidsID": "ff9619ff-8b46-d011-b42d-00c04fc934f1",
        "IDNum": "594832934875849485",
        "Sex": "1",
        "RecordTime": "2012/2/28 10:29:34",
        "Address": "合額度126號",
        "Name": "陳-冠-希是你",
        "Age": "34",
        "GeographicLocation": "43.887594849178,81.3012265555597",
        "IllnessNarratives": "2",
        "得病類型": "",
        "民族": "",
        "吸毒史": "",
        "VillageID": "ff9619ff-8b46-d011-b42d-00c04fc934f6"
    },
    {
        "PersonAidsID": "ff9619ff-8b46-d011-b42d-00c04fc934f1",
        "IDNum": "594832934875849485",
        "Sex": "1",
        "RecordTime": "2012/2/28 10:29:34",
        "Address": "合額度126號",
        "Name": "陳-冠-希是你",
        "Age": "34",
        "GeographicLocation": "43.887594849178,81.3012265555597",
        "IllnessNarratives": "2",
        "得病類型": "",
        "民族": "",
        "吸毒史": "",
        "VillageID": "ff9619ff-8b46-d011-b42d-00c04fc934f6"
    },
    {
        "PersonAidsID": "ff9619ff-8b46-d011-b42d-00c04fc934f1",
        "IDNum": "594832934875849485",
        "Sex": "1",
        "RecordTime": "2012/2/28 10:29:34",
        "Address": "合額度126號",
        "Name": "陳-冠-希是你",
        "Age": "34",
        "GeographicLocation": "43.887594849178,81.3012265555597",
        "IllnessNarratives": "2",
        "得病類型": "",
        "民族": "",
        "吸毒史": "",
        "VillageID": "ff9619ff-8b46-d011-b42d-00c04fc934f6"
    },
    {
        "PersonAidsID": "ff9619ff-8b46-d011-b42d-00c04fc934f1",
        "IDNum": "594832934875849485",
        "Sex": "1",
        "RecordTime": "2012/2/28 10:29:34",
        "Address": "合額度126號",
        "Name": "陳-冠-希是你",
        "Age": "34",
        "GeographicLocation": "43.887594849178,81.3012265555597",
        "IllnessNarratives": "2",
        "得病類型": "",
        "民族": "",
        "吸毒史": "",
        "VillageID": "ff9619ff-8b46-d011-b42d-00c04fc934f6"
    },
    {
        "PersonAidsID": "ff9619ff-8b46-d011-b42d-00c04fc934f1",
        "IDNum": "594832934875849485",
        "Sex": "1",
        "RecordTime": "2012/2/28 10:29:34",
        "Address": "合額度126號",
        "Name": "陳-冠-希是你",
        "Age": "34",
        "GeographicLocation": "43.887594849178,81.3012265555597",
        "IllnessNarratives": "2",
        "得病類型": "",
        "民族": "",
        "吸毒史": "",
        "VillageID": "ff9619ff-8b46-d011-b42d-00c04fc934f6"
    },
    {
        "PersonAidsID": "ff9619ff-8b46-d011-b42d-00c04fc934f1",
        "IDNum": "594832934875849485",
        "Sex": "1",
        "RecordTime": "2012/2/28 10:29:34",
        "Address": "合額度126號",
        "Name": "陳-冠-希是你",
        "Age": "34",
        "GeographicLocation": "43.887594849178,81.3012265555597",
        "IllnessNarratives": "2",
        "得病類型": "",
        "民族": "",
        "吸毒史": "",
        "VillageID": "ff9619ff-8b46-d011-b42d-00c04fc934f6"
    },
    {
        "PersonAidsID": "ff9619ff-8b46-d011-b42d-00c04fc934f1",
        "IDNum": "594832934875849485",
        "Sex": "1",
        "RecordTime": "2012/2/28 10:29:34",
        "Address": "合額度126號",
        "Name": "陳-冠-希是你",
        "Age": "34",
        "GeographicLocation": "43.887594849178,81.3012265555597",
        "IllnessNarratives": "2",
        "得病類型": "",
        "民族": "",
        "吸毒史": "",
        "VillageID": "ff9619ff-8b46-d011-b42d-00c04fc934f6"
    },
    {
        "PersonAidsID": "ff9619ff-8b46-d011-b42d-00c04fc934f1",
        "IDNum": "594832934875849485",
        "Sex": "1",
        "RecordTime": "2012/2/28 10:29:34",
        "Address": "合額度126號",
        "Name": "陳-冠-希是你",
        "Age": "34",
        "GeographicLocation": "43.887594849178,81.3012265555597",
        "IllnessNarratives": "2",
        "得病類型": "",
        "民族": "",
        "吸毒史": "",
        "VillageID": "ff9619ff-8b46-d011-b42d-00c04fc934f6"
    }
]

 

 服務端:

   特別注意我的服務端.....  就是一個ASPX的頁面。然后使用Response.Write 的方法向客戶端輸送數據。個人覺得這種方式簡單又靈活。比起WCF。

最后的服務端如下

          

 

客戶端取得數據:

string dataUrl = HtmlPage.Document.DocumentUri.AbsoluteUri.Replace("Default.aspx", "Handler/Data.aspx");
WebClient webClient = new WebClient();
webClient.DownloadStringAsync(new Uri(dataUrl));
webClient.DownloadStringCompleted += (sender1, e1) =>
{
  MessageBox.Show(e1.Result);
};

 

呵呵這寫法非常常見。   但值得各位注意的是:

string dataUrl = HtmlPage.Document.DocumentUri.AbsoluteUri.Replace("Default.aspx", "Handler/Data.aspx");  

這個寫法。這樣的話,不管換哪個IP,都不會有問題。

反射實體類來咯

      上面客戶端已經可以取得數據了。接下來要做的就是怎么把JSON轉換為實體類實例集合。

   有三步工作要做。

      1:從JSON中獲得列頭。(見代碼中GetCoumsByJson 方法)

      2:從列頭反射形成實體類。(見代碼中getTypeByStrList方法)

  3:反序列化形成實體類集合。

  下面直接上代碼。怎么做的。看代碼便知。

  http://files.cnblogs.com/MySilverlight/SilverlightApplication2.zip

     諸位看看代碼便知。注意跑起來之后瀏覽首頁要點擊一下那個按鈕才顯示數據哦

會影響性能嗎?

   基本不會。因為即便是使用反射形成實體類。但請注意,這里是使用的Emit的方式。這種反射方式不咋影響性能....。

 

 

后話:這算做是我框架介紹的開篇....  呵呵  一共五偏 呵呵


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM