3

WCF DataContrat で ToString 関数をオーバーライドできますか? 今私は持っています:

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

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

しかし、うまくいかないようです。とにかくこれを機能させるには?

4

3 に答える 3

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;
        }
    }
}

Key参照できるのはとのみであることに注意してくださいTimestampValueこれらは[DataContract]の[DataMember]値であるためです。

探しているものがわかっていれば、これは比較的簡単です。ここで不明な点がある場合は、お知らせください。明確にするよう努めます。

ありがとう

于 2012-01-23T16:06:58.213 に答える
1

どこで を呼び出せるようにしたいToString()ですか? メソッドは DataContract の一部ではないため、クライアントのプロキシを作成するときに使用できません。

もちろん、クライアントのプロキシでそのメソッドを自分でコーディングすることを妨げるものは何もありません。

于 2009-07-25T02:46:17.180 に答える
0

また、サーバーとクライアントの両方を所有している場合は、クライアント プロキシを生成するのではなく、共有ライブラリをデータ コントラクトに使用できることもよくあります。これを行うと、サーバーとクライアントの両方で同じメソッドを使用できます。これらはまったく同じタイプだからです。

于 2009-07-25T10:27:00.113 に答える