WCF 客户端参数问题 string数组自动解析为ArrayOfString

nkt7888 2015-10-27 05:12:27
如题,我服务端有个方法,参数是Dictionary<String,object>,因为参数有多种类型,而且会根据不同条件进行增减,为了少写一些重载方法,就用了字典.平时string,int,byte[]都没问题,这次遇到了string数组,就不行了,老是报错,错误消息如下:
引用
尝试对参数 http://tempuri.org/ 进行序列化时出错: dictionary。InnerException 消息是“数据协定名称为“ArrayOfstring:http://schemas.microsoft.com/2003/10/Serialization/Arrays”的类型“System.String[]”不是所需的类型。请考虑使用 DataContractResolver(如果你正在使用 DataContractSerializer),或将任何未知类型以静态方式添加到已知类型的列表。例如,可以使用 KnownTypeAttribute 属性,或者将未知类型添加到传递给序列化程序的已知类型列表。”。有关详细信息,请参见 InnerException。


我怎么找都找不到ArrayOfString,网上搜了一大堆也没有办法,为什么他会把数组变为ArrayOfstring,能不能不让他变呢?

这是服务端代码:

public BindingList<EmployeesEntity> GetEmployeesWithEmergencyContactsEntities(Dictionary<string, object> dictionary, List<string> listColumns)
{
//查询员工信息
EmployeesBLL bll = new EmployeesBLL();
BindingList<EmployeesEntity> employeesEntities = bll.GetEmployeesEntities(dictionary, null);
EmployeeEmergencyContactBLL emergencyContactBll = new EmployeeEmergencyContactBLL();
return employeesEntities;
}


这是客户端代码:

//获取对象
Dictionary<string, object> dictionary = new Dictionary<string, object>
{
{
"Status", new string[] {"1","2","3"}
},
{
"ServiceStationID", GlobalData.LoginEmployees.ServiceStationID
}
};
SvcClient.Invoke<EmployeesClient>(client =>
{
EmployeesViewModel.EmployeesEntities = client.GetEmployeesWithEmergencyContactsEntities(dictionary, null);
//将每个实体赋值中文
DataConvert.SetPropertyName<EmployeesEntity>(EmployeesViewModel.EmployeesEntities, PublicDataSource.PublicDataSourceTable);
});

...全文
1407 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
changjiangzhibin 2016-01-28
  • 打赏
  • 举报
回复
建议用List<T>形式,或直接T
  • 打赏
  • 举报
回复
引用 4 楼 nkt7888 的回复:
[quote=引用 2 楼 starfd 的回复:] 你没法给object加knowtype,所以你这个只能改契约
完蛋了,修改契约那不是得写好多重载方法啊,有一个需求就得写一个方法...[/quote] “完蛋”一次,才知道什么是 WCF 嘛。
  • 打赏
  • 举报
回复
使用 vs 自动产生WCF 客户端代理代码,并且每一个服务方法的参数的数据类型应该是强类型、固定类型(不同参数应该属于不同服务方法)。 按照规范去进行WCF编程,本身是几秒钟的事情。不要自己胡乱发明创造。
fate23409 2016-01-27
  • 打赏
  • 举报
回复
自定义数据类型,代替Dictionary
青狂不轻狂gg 2016-01-06
  • 打赏
  • 举报
回复
改成Table吧,WCF传递Table可以的
nkt7888 2015-10-27
  • 打赏
  • 举报
回复
引用 3 楼 feiyun0112 的回复:
WCF不能用Dictionary,换成别的对象传
换成了hashtable 还是一样啊,knowtype也加了,还是报一样的错,难道就必须得单用一个参数为string[] 才可以吗?
nkt7888 2015-10-27
  • 打赏
  • 举报
回复
引用 5 楼 starfd 的回复:
你直接写object的参数是可以的,可以在操作契约上写knowtype,但dictionary这个是frame提供的,你没法给泛型加knowtype
我改为hashtable也不行啊... hashtable不是泛型的....
  • 打赏
  • 举报
回复
你直接写object的参数是可以的,可以在操作契约上写knowtype,但dictionary这个是frame提供的,你没法给泛型加knowtype
nkt7888 2015-10-27
  • 打赏
  • 举报
回复
引用 2 楼 starfd 的回复:
你没法给object加knowtype,所以你这个只能改契约
完蛋了,修改契约那不是得写好多重载方法啊,有一个需求就得写一个方法...
feiyun0112 2015-10-27
  • 打赏
  • 举报
回复
WCF不能用Dictionary,换成别的对象传
  • 打赏
  • 举报
回复
你没法给object加knowtype,所以你这个只能改契约
nkt7888 2015-10-27
  • 打赏
  • 举报
回复
另外我也试过使用KnownType属性,把数组加进去了,还是不行

12,165

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 Web Services
社区管理员
  • Web Services社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧