关于自定义实体类在webservice调用时property丢失的问题

三个project,一个client,一个webservice,一个webservicecomponent。
client代码:

localhost.ToolType[] types;
localhost.Service1 s 
= new localhost.Service1();
types 
= s.GetToolType();
comboBox1.DisplayMember 
= "Name";
comboBox1.ValueMember 
= "Code";
comboBox1.DataSource 
= types;

webservice的代码:
[WebMethod]
public ToolType[] GetToolType()
{
    ToolType[] types;

    types 
= new ToolType[3];
    types[
0= new ToolType();
    types[
0].Code = 1;
    types[
0].Name = "COM+";
    types[
0].ImplClass = "test";

    types[
1= new ToolType();
    types[
1].Code = 2;
    types[
1].Name = ".NET";
    types[
1].ImplClass = "test2";

    types[
2= new ToolType();
    types[
2].Code = 3;
    types[
2].Name = "ShellExecute";
    types[
2].ImplClass = "test3";

    
return types;
}

后台component的代码:
public class ToolType
{
    
private int code;
    
private string name,implclass;

    
/// <summary>编号</summary>
    public int Code{get{return code;}set{code = value;}}

    
/// <summary>名称</summary>
        public string Name{get{return name;}set{name = value;}}
    
/// <summary>可以对该类型进行解析的类</summary>
    public string ImplClass{get{return implclass;}set{implclass = value;}}
}


注意!上面的service中的代码,其实不应该这么写。而再写一个ToolTypeManager类,提供一个Read的方法。我这里为了简单,就把这段代码直接放到service里面了。

好了!到说问题的时候了!

当我在client调用service的时候,返回的ToolType中(可以看reference.cs文件),所有的property都变成了普通的field,亦即:get/set都没有了。这样,我用这个数组来帮定一个control的时候,出错了!显示的是namespace.classname,而不是具体的值。这个原因,就是因为.net绑定的时候,是按照property来的,而不是field来的(可以参见:C#高级编程,就是那本巨厚的书)

这个问题,我不知道咋解决。后来,把代码修改了,返回dataset,而不是我自己的实体类,就搞定了。
posted @   鞠强  阅读(1841)  评论(1编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?

hello

world

点击右上角即可分享
微信分享提示