• 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:反序列化形成实体类集合。

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

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

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

    会影响性能吗?

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

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

  • 相关阅读:
    【玩转开源】制作Docker镜像
    【玩转开源】Linux C 检测网口热插拔
    【玩转开源】BananaPi R2 —— 第四篇 Openwrt Luci 初探
    【玩转开源】BananaPi R2 —— 第二篇 Openwrt 网口配置分析
    .NET Core 中AutoMapper使用配置
    ElementUI 中控件 Select 大数据量渲染处理
    Echart处理X轴显示不全问题
    C#WebAPI中中log4net的配置步骤
    iis7.5 部署WebAPI
    core2.2部署IIS
  • 原文地址:https://www.cnblogs.com/MySilverlight/p/2516970.html
Copyright © 2020-2023  润新知