您的位置:首页 > 其它

Silverlight不写实体类也能显示数据呵呵

2012-08-01 15:15 218 查看

开篇

在任何的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:从列头反射形成实体类。[b](见代码中getTypeByStrList方法)[/b]

  3:反序列化形成实体类集合。

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

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

诸位看看代码便知。注意跑起来之后浏览首页要点击一下那个按钮才显示数据哦

会影响性能吗?

基本不会。因为即便是使用反射形成实体类。但请注意,这里是使用的Emit的方式。这种反射方式不咋影响性能....。

后话:这算做是我框架介绍的开篇.... 呵呵 一共五偏 呵呵

/article/5137091.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: