2016-11-28 78 views
1

显示我有这样的类别:C#覆盖toString()和在的textBox

namespace JimWcfFormTest3 
{ 
[DataContract] 

public class GateInfo 
{ 
    [DataMember] 
    public int carid { get; set; } 

    [DataMember] 
    public int paid_at_gate { get; set; } 

    [DataMember] 
    public int wash_pkg_purch { get; set; } 

    [DataMember] 
    public string carte { get; set; } 

    public override string ToString() 
    { 
     return "Car ID: " + carid + "Paid at Gate: " + paid_at_gate + "Wash Package: " + wash_pkg_purch + "Ala Carte: " + carte; 
    } 
} 

}

被此WCF服务称为:

namespace JimWcfFormTest3 
{ 
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)] 
public class Service1 : IService1 
{ 
    private List<GateInfo> _gate; 

    private Service1() 
    { 
     _gate = new List<GateInfo>(); 
    } 

    public void Gate_to_Server(GateInfo gatein) 
    { 
     if (gatein != null) _gate.Add(gatein); 
    } 

    public List<GateInfo> Server_to_Term() 
    { 
     return _gate; 
    } 
} 

}

即在此表单上由此Button调用:

private Service1Client server = new Service1Client(); 
    private void button1_Click(object sender, EventArgs e) 
    { 
     int carnum = 2; 
     int pay = 1; 
     int wash = 5; 
     string txt = "TEST"; 
     var data_out = new GateInfo { carid = carnum, paid_at_gate = pay, wash_pkg_purch = wash, carte = txt }; 

     server.Gate_to_Server(data_out); 

     dataGridView1.DataSource = server.Server_to_Term(); 

我的ToString被覆盖在正确的位置吗?如何正确调用Form中的ToString重写,所以当按钮被点击时,我可以将它放在一个文本框中?

+0

GateInfo.ToString()不起作用吗?在你的情况data_out.ToString() –

+1

@SamMarion - 问题(如下面的答案中所述)是DataContract中的方法没有通过连线进行序列化,只有实际的数据。因此,除非客户端具有完全相同的类(即共享类型),否则它将不知道“GetString()”实现是什么样子,并且将依赖于框架的实现。 – Tim

回答

2

由于您正在通过Web服务调用此类型,因此GateInfo类型将被序列化回客户端应用程序(您的Forms应用程序)。如果客户端应用程序不具有本地GateInfo类型,那么您将使用序列化类型,该类型不包含函数。

为了让ToString覆盖客户端的工作,您需要将该类包含在Forms应用程序中。我通常通过将共享数据类型/模型对象放入单独的类库中来实现“类型共享”,并使服务器和客户端都使用此库来映射对象类型。

如果您使用此方法,请确保您将WCF服务属性下的选项勾选为Reuse types in referenced assemblies。这将让WCF客户端生成器知道正确映射该类型。

+0

这样做,谢谢! – JEtheDBA