WCF学习笔记(5)——wcf序列化List<T>并返回
来源:互联网 发布:lol英雄数据 编辑:程序博客网 时间:2024/05/17 15:41
本文将部署一个wcf+silverlight简单实例,完成wcf返回我们自定义的类型,并以List<T>显示在silverlight上,以下是详细步骤:
1.new一个wcf服务,注意要申明一下我们需要返回的自定义类型,[KnownType(typeof(Terminal))](本例自定义的类型为Terminal)
[DataContract]//实体类契约 [KnownType(typeof(Terminal))] public class Terminal { [DataMember] public object pkCode { get; set; } [DataMember] public object sName { get; set; } [DataMember] public object fkArea { get; set; } [DataMember] public object nState { get; set; }}
对应我们的wcf服务契约也要申明一下
[ServiceContract] [ServiceKnownType(typeof(Terminal))] public interface IServiceData { [OperationContract] List<Terminal> GetTerminals(); }
public class ServiceData : IServiceData { public List<Terminal> GetTerminals() {
//获取业务数据,根据你的实际开发环境自行编写 List<Terminal> list = new List<Terminal>(); DataTable dt = IocMgr.Get<ITerminalMgr>().GetTer(); foreach (DataRow row in dt.Rows) { Terminal ter = new Terminal(); ter.pkCode = row["pkcode"]; ter.sName = row["sname"]; ter.fkArea = row["fkarea"]; ter.nState = row["nstate"]; list.Add(ter); } return list; } }
2.下面来准备一个silverlight程序来作为演示的舞台,并添加我们的wcf服务引用
简单的布局一下我们的silverlight舞台
<Grid x:Name="LayoutRoot"> <sdk:DataGrid x:Name="datagrid" AutoGenerateColumns="False" Margin="12" > <sdk:DataGrid.Columns > <sdk:DataGridTextColumn Header="终端编码" Binding="{Binding pkCode}"/> <sdk:DataGridTextColumn Header="点位名称" Binding="{Binding sName}"/> <sdk:DataGridTextColumn Header="区域" Binding="{Binding fkArea}"/> <sdk:DataGridTextColumn Header="状态" Binding="{Binding nState}"/> </sdk:DataGrid.Columns> </sdk:DataGrid> </Grid>
后台cs中,添加调用wcf方法
// 当用户导航到此页面时执行。本例使用了导航sl程序,根据你的实际开发环境自行修改 protected override void OnNavigatedTo(NavigationEventArgs e) { Binding binding = new BasicHttpBinding(); EndpointAddress endPoint = new EndpointAddress("http://localhost:9090/Service.svc"); WCFServiceData.ServiceDataClient client = new WCFServiceData.ServiceDataClient(binding, endPoint); client.GetTerminalsCompleted += new EventHandler<WCFServiceData.GetTerminalsCompletedEventArgs>(client_GetTerminalsCompleted); client.GetTerminalsAsync(); } void client_GetTerminalsCompleted(object sender, WCFServiceData.GetTerminalsCompletedEventArgs e) { List<WCFServiceData.Terminal> list = e.Result; this.datagrid.ItemsSource = list; }
编译一下,你会得到如下的异常提示
分析异常,我们发现wcf序列化后返回的类型,并不是我们预想的List<Terminal>,而是Terminal[],
解决方法,需要设置一下vs的默认配置服务引用
修改数据类型中的集合类型,选择System.Collections.Generic.List(默认为System.Array)
ok,重新编译一下我们的项目,F5运行一下,问题解决
- WCF学习笔记(5)——wcf序列化List<T>并返回
- WCF学习笔记——WCF基础
- [原创]WCF技术剖析之八:ClientBase<T>中对ChannelFactory<T>的缓存机制
- WCF学习笔记(2)——独立WCF服务
- List<T>排序
- 学习笔记——WCF
- WCF、WPF—学习笔记
- WCF学习笔记—Overview
- EF + WCF学习笔记——EF实体类序列化
- WCF学习笔记——1.最基础的WCF
- WCF学习笔记(一):WCF简介
- 深入学习WCF-序列化
- WCF 学习笔记 一WCF 基础(WCF基础概念)
- 【泛型】使用List<T>篇
- json转换成list<T>
- WCF学习笔记(4)——宿主iis部署wcf
- WCF学习(一)——了解WCF
- C#学习笔记32——WCF
- Android开发adb环境配置
- Android学习笔记(5)——对话框
- 图像处理之基于一维高斯快速模糊
- windowsXP同步Internet时间
- WCF学习笔记(4)——宿主iis部署wcf
- WCF学习笔记(5)——wcf序列化List<T>并返回
- Silverlight学习笔记(5)——读取宿主web.config
- C#读取EXCEL文件
- C++实现筛选法
- JAVA面试题02
- redis 资料记录
- 公式解释
- 以指向函数的指针作为函数形参实现多个函数的替换
- 北京架构师市场需求