Сериализация WCF с объектным наследованием?

IMO, вы не хотите использовать псевдоним для этого. Скорее, вы хотите манипулировать вашей файловой системой и / или переменной PATH, чтобы первый экземпляр двоичного файла с именем «python», найденный системой в вашем PATH, был тем, который вы хотите запустить по умолчанию.

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

Вы также можете узнать, что Mac может делать в вашем случае, чтобы управлять несколькими версиями Python каким-то формальным способом. Это может быть лучшим решением, но я не могу сказать вам, как это работает. Вы могли бы Google для этой информации, вероятно. Если вы хотите использовать более простой подход, читайте дальше.

Сначала я бы предложил выполнить команду ls -l `which python` . Это скажет вам, какой двоичный файл Python в настоящее время является файлом по умолчанию, и покажет вам детали этого двоичного файла. Я предполагаю, что этот «двоичный файл» на самом деле является символической ссылкой, указывающей на какой-то другой файл. Если это так, вы можете просто удалить эту ссылку или переименовать ее в другое место. То же самое будет работать, если вы видите не символическую ссылку, а настоящий исполняемый файл, но решение об удалении или переименовании реального исполняемого файла имеет большее значение. Если вы просто переименуете этот файл, вы можете в любое время изменить то, что сделали,

Как только вы это сделаете, снова выполните ls -l `which python` . Это должно дать вам новый ответ и указать на исходную установку Python. Вы можете подтвердить, какая версия python теперь является версией по умолчанию, запустив python .

5
задан DDiVita 18 March 2009 в 14:02
поделиться

2 ответа

Вы обрабатываете наследование путем добавления a [KnownType(typeof(ServiceObject))] кому: EnterpriseBaseObject - однако, EnterpriseBaseObject все еще часть контракта, и его существование будет общедоступно. Но только участники отмечены [DataMember] будет опубликован.

Одна опция (для удаления наследования) состоит в том, чтобы иметь отдельный DTO в целях сериализации и иметь преобразование между версией DTO и фактической версией - но это делает дополнительную работу.

7
ответ дан 14 December 2019 в 01:17
поделиться

Можно ли изменить это от шаблона к шаблона? Если ServiceObject имеет EnterpriseObject, Вы могли бы затем выставить просто свойства, в которых Вы нуждаетесь.

Править

Если я понимаю правильно, что Вы хотите подвергнуть ServiceObject клиентам включая все его свойства (Которые отмечены как DataMember) включая свойства, наследованные от EnterpriseObject. Но Вы не хотите, чтобы клиент знал, что существует объект под названием EnterpriseObject.

Можно сделать это hidding то, что существует объект предприятия. Вместо того, чтобы использовать "" отношения, которые являются шаблоном наследования. Можно использовать состав, или "Имеет" шаблон.

public class ServiceObject
{
   private EnterpriseObject _myEntObject;

   public string MyServiceObjectProperty
   {
      get;
      set;
   }

   public string MyEntObjectProperty
   {
     get { return _myEntObject.MyEntObjectProperty;}
   }
}

Теперь Вы изолировали свой EnterpriseObject от Вашего клиента. Вся Ваша передача состоит в том, что ServiceObject имеет некоторые свойства, которые Вы не выставляете своему клиенту, что это реализовано на сервере некоторым другим объектом.

Это также подобно наличию DTO, который является объектом, это - единственная цель, должен передать данные. DTO позволяет Вам, скрывают Вашу реализацию путем предоставления клиентам точно, в чем они нуждаются в формате, в котором они нуждаются, не выставляя внутренние объекты.

2
ответ дан 14 December 2019 в 01:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: