Функция WCF DataContract toString для обработки данных
-
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, поэтому они не будут доступны при создании прокси-сервера для клиента.
Конечно, ничто не мешает вам самостоятельно закодировать этот метод в прокси-сервере клиента.