2016-11-28 82 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