WCF DataContract ToString function

2019-06-26 17:59发布

您可以覆盖一个WCF DataContrat的ToString函数? 现在,我有:

[DataContract]
public class Keyword
{
    public int ID { get; set; }
    public string Name { get; set; }

    public override string ToString()
    {
        return Name;
    }
}

但它似乎并没有工作。 无论如何得到这个工作?

Answer 1:

别忘了,如果你同时拥有服务器和客户端,经常可以使用一个共享库数据的合同,而不是生成客户端代理。 如果你这样做,那么你可以因为他们是完全一样的类型有服务器和客户端都在同一个方法。



Answer 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 {

你将需要使用的重要位是namespacepartial 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;
        }
    }
}

请注意,我只能引用KeyTimestampValue ,因为他们是[数据成员]为[DataContract]值。

如果你知道你在找什么,这是比较简单的。 如果有什么这里是不明确的,请让我知道,我会试图澄清。

谢谢



Answer 3:

你在哪里希望能够调用ToString() 方法是不是DataContract的一部分,所以当您创建客户端的代理,他们将无法使用。

当然,没有什么是从编码在客户端的代理自己这个方法阻止你。



文章来源: WCF DataContract ToString function