Функция WCF DataContract toString для обработки данных

StackOverflow https://stackoverflow.com/questions/1181039

  •  19-09-2019
  •  | 
  •  

Вопрос

Можете ли вы переопределить функцию toString в WCF datacontrat'е?Прямо сейчас у меня есть:

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

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

Но, похоже, это не работает.В любом случае, чтобы заставить это работать?

Это было полезно?

Решение

Помните также, что если вы являетесь владельцем как сервера, так и клиента, то часто вы можете использовать общую библиотеку для контрактов с данными, а не создавать клиентский прокси.Если вы сделаете это, то у вас может быть один и тот же метод как на сервере, так и на клиенте, поскольку они абсолютно одного типа.

Другие советы

Я понимаю, что это устарело, но хотел бы дать ответ, поскольку я только что создал образец приложения для коллеги, который использовал эту идею.Вся эта работа может быть выполнена на стороне потребителя / тестового клиента.

Если вы посмотрите на код на потребительском / тестовом клиенте и, более конкретно, на классы, которые генерируются как часть ссылки на сервис, вы увидите интересующий вас тип [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 потому что они являются значениями [DataMember] для [DataContract].

Это относительно просто, если вы знаете, что ищете.Если здесь что-то непонятно, пожалуйста, дайте мне знать, и я попытаюсь прояснить.

Спасибо

Где вы хотите иметь возможность вызывать ToString()?Методы не являются частью DataContract, поэтому они не будут доступны при создании прокси-сервера для клиента.

Конечно, ничто не мешает вам самостоятельно закодировать этот метод в прокси-сервере клиента.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top