您可以覆盖WCF DataContrat中的ToString函数吗?现在我有:
[DataContract]
public class Keyword
{
public int ID { get; set; }
public string Name { get; set; }
public override string ToString()
{
return Name;
}
}
但它似乎不起作用。无论如何要让这个工作?
答案 0 :(得分:2)
我意识到这已经过时了,但我想提供一个答案,因为我刚刚为使用这个想法的同事创建了一个示例应用程序。所有这些工作都可以在消费者/测试客户端完成。
如果您查看使用者/测试客户端上的代码,更具体地说,是作为服务引用的一部分生成的类,您将看到您感兴趣的[DataContract]类型。为了做到这一点你应该确保选中“显示所有文件”。深入研究'Reference.cs'类。 这是我在Reference.cs中测试类的顶部:
namespace WebApplication1.UCCTestSvcRef {
using System.Runtime.Serialization;
using System;
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="UCCRecord", Namespace="http://schemas.datacontract.org/2004/07/UCCTest")]
[System.SerializableAttribute()]
public partial class UCCRecord : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
您需要使用的重要部分是namespace
和partial class
。要使用这些,您只需在相同类型的测试客户端中创建一个新类,在同一名称空间中,并覆盖ToString()方法。
以下是如何从使用者/测试客户端上新创建的UCCRecord.cs文件中执行此操作的示例。
namespace WebApplication1.UCCTestSvcRef
{
public partial class UCCRecord
{
public override string ToString()
{
return "Key: " + Key.ToString() + ", Time: " + Timestamp.ToString("d") + ", Value: " + Value;
}
}
}
请注意,我只能引用Key
和Timestamp
以及Value
,因为它们是[DataContract]的[DataMember]值。
如果您知道自己在寻找什么,这相对简单。如果此处的任何内容不明确,请告诉我,我会尝试澄清。
由于
答案 1 :(得分:1)
您希望在哪里调用ToString()
?方法不是DataContract的一部分,因此在为客户端创建代理时它们将不可用。
当然,没有什么能阻止你自己在客户端的代理中编写该方法。
答案 2 :(得分:0)
请记住,如果您同时拥有服务器和客户端,那么通常您可以使用共享库来进行数据签约,而不是生成客户端代理。如果你这样做,那么你可以在服务器和客户端上使用相同的方法,因为它们的类型完全相同。