WCF - вернуть объект без сериализации? - PullRequest
1 голос
/ 30 декабря 2010

Одна из моих функций WCF возвращает объект, который имеет переменную-член типа из другой библиотеки, которая находится вне моего контроля.Я не могу украсить классы этой библиотеки.Фактически, я даже не могу использовать DataContractSurrogate, потому что классы библиотеки имеют закрытые переменные-члены, которые необходимы для работы (т. Е. Если я возвращаю объект без этих закрытых переменных-членов, публичные свойства выдают исключения).что совместимость для этого конкретного метода не требуется (по крайней мере, пока владельцы этой библиотеки не смогут пересмотреть, чтобы сделать их объекты сериализуемыми), могу ли я использовать WCF, чтобы возвратить этот объект так, чтобы он мог по крайней мере использоваться a.NET клиент?

Как мне это сделать?

Обновление: я добавляю псевдокод ниже ...

// My code, I have control

[DataContract]
public class MyObject
{
  private TheirObject theirObject;

  [DataMember]
  public int SomeNumber
  {
    get { return theirObject.SomeNumber; } // public property exposed
    private set { }
  }
}

// Their code, I have no control

public class TheirObject
{
  private TheirOtherObject theirOtherObject;

  public int SomeNumber 
  { 
    get { return theirOtherObject.SomeOtherProperty; }
    set { // ... }
  }
}

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

Ответы [ 2 ]

2 голосов
/ 30 декабря 2010

Конечно, напишите класс-оболочку, который имеет все те же общедоступные свойства, и просто введите "get { return internalObject.ThisProperty; }. Украсьте класс-оболочку, чтобы он работал с WCF.

0 голосов
/ 30 декабря 2010

Другой вариант - написать прокси-класс, который отражает свойства типа, который вы хотите точно использовать, и вернуть его через WCF.

Вы можете использовать AutoMapper для заполнения прокси-объекта.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...