Как использовать XmlAttributeOverrides с WCF - PullRequest
1 голос
/ 07 августа 2011

У меня есть служба WCF, использующая basicHttpBinding.В методе службы у меня есть класс, который возвращается, для этого класса мне нужно динамически / программно исключить свойства и изменить имена свойств для XML.Это необходимо сделать как в WSDL, так и при вызове метода обслуживания.

Я искал лучшее решение, и, похоже, мне потребуется (1) использовать XmlAttributeOverrides с XmlSerializer или (2) реализовать IXmlSerializable для класса, который необходимо настроить.Или может быть лучшее решение в целом.Я знаю, что Имя свойства + «Указано» можно добавить в класс, а затем эти свойства можно исключить.Однако это не исключается в WSDL и не решает проблему переименования свойств.

Зачем мне это нужно?Из-за глобализации и настройки нашего приложения.Есть много свойств, встроенных в наше приложение, которые могут быть переименованы или полностью скрыты от пользователей приложения.

После МНОГО исследования я лучше всего заменю сериализатор WCF на свой собственный сериализатор.Однако я никогда не нашел хороших примеров того, как это сделать для пользовательского класса, который использовал бы XmlSerializer.Кроме того, я не уверен, как передать XmlAttributeOverrides для определенного класса.

Кроме того, это может не относиться к тем, кто хочет такую ​​же функциональность, но в моем приложении мне нужно только инициализировать значенияодин раз за всю жизнь приложения.Жаль, что C # не позволяет использовать статические переменные только для чтения с атрибутами.

Вот простой пример класса:

public Customer
{
  public string Address1
  {
    get;
    set;
  }

  public string Address2
  {
    get;
    set;
  }

  public string Zipcode
  {
    get;
    set;
  }
}

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

Ваша помощь очень ценится.

Спасибо, Тайлер

Ответы [ 2 ]

1 голос
/ 07 августа 2011

В наше приложение встроено много свойств, которые могут быть переименованы или полностью скрыты от пользователей приложения.

Стандартный подход заключается в создании специального объекта передачи данных (DTO).Или несколько.

0 голосов
/ 07 августа 2011

Я знаю, что это похоже на уловку, но поскольку имена свойств вашего объекта являются динамическими, почему бы просто не использовать пакетирование свойств вместо выполнения этого перемешивания XMLSerializer?

...