Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WCF, Web Services, Remoting Новый топик    Ответить
 Спрятать на клиенте base class  [new]
LoLoShkA
Member

Откуда:
Сообщений: 2
Всем дня. Можно ли провернуть фокус чтобы спрятать на стороне клиента класс-родитель?

На стороне сервиса:
+

[ServiceContract]
public class TestService
{ [OperationContract]
   void GetDate(string name, out List<Test1> blabla, out List<Test2>);
}
[DataContract,KnownType(typeof(Test1)), KnownType(typeof(Test2))]
public abstract class TestBase
{private readonly string _par1;
  private readonle string _par2;  
  protected TestBase(string par1, string par2)
{_par1 =par1;
 _par2 = par2;
}
  [DataMember] protected string par1 => _par1;
  [DataMember] protected string par2 => _par2;
}

[DataContract]
public class Test1 : TestBase
{
  private readonly string _par3;
  
  public Test1(string _par1, string _par2) : base (_par1, _par2)
  {
      _par3 = "AAAAA";
  }
  [DataMember] public string par3 => _par3;
}

[DataContract]
public class Test2 : TestBase
{
  private readonly string _par4;
  
  public Test2(string _par1, string _par2) : base (_par1, _par2)
  {
      _par4 = "BBBBB";
  }
   [DataMember] public string par4 => _par4;
}



И вроде все работает, но в wsdl Test1 и Test2 описаны

<xs:complexType name="Test1">
<xs:complexContent mixed="false">
<xs:extension base="tns:TestBase">
<xs:sequence>
<xs:element minOccurs="0" name="par3" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>

<xs:complexType name="TestBase">
<xs:sequence>
<xs:element minOccurs="0" name="par" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="par2" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>

и соответсвенно на стороне клиента, доступен класс TestBase.

На клиенте можно делать:
Service.TestBase aaa = new Service.TestBase();


Можно ли как-то указать чтобы сериализовались только класс Test1 и Test2 и клиент про класс TestBase ничего не знал, а мог оперировать только Test1 и Test2
Что бы стало что-то в таком духе

<xs:complexType name="Test1">
<xs:sequence>
<xs:element minOccurs="0" name="par" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="par2" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="par3" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
26 июл 17, 09:04    [20675359]     Ответить | Цитировать Сообщить модератору
 Re: Спрятать на клиенте base class  [new]
LoLoShkA
Member

Откуда:
Сообщений: 2
Как я понимаю можно написать что-то в таком духе.
Но хотелось бы узнать про base practice? Или не заморачиваться и отдавать на клиента все?
[DataContract,KnownType(typeof(Test1)), KnownType(typeof(Test2))]
public abstract class TestBase
{private readonly string _par1;
  private readonle string _par2;  
  protected TestBase(string par1, string par2)
{_par1 =par1;
 _par2 = par2;
}
  protected string par1 => _par1;
  protected string par2 => _par2;
}

[DataContract]
public class Test1 : TestBase
{
  private readonly string _par3;
  
  public Test1(string _par1, string _par2) : base (_par1, _par2)
  {
      _par3 = "AAAAA";
  }
  [DataMember] public string par3 => _par3;
  [DataMember] public string par1 => base.par1;
  [DataMember] public string par2 => base.par2;
  
}
26 июл 17, 09:47    [20675463]     Ответить | Цитировать Сообщить модератору
 Re: Спрятать на клиенте base class  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 2988
LoLoShkA
Как я понимаю можно написать что-то в таком духе.
Но хотелось бы узнать про base practice? Или не заморачиваться и отдавать на клиента все?
[DataContract,KnownType(typeof(Test1)), KnownType(typeof(Test2))]
public abstract class TestBase
{private readonly string _par1;
  private readonle string _par2;  
  protected TestBase(string par1, string par2)
{_par1 =par1;
 _par2 = par2;
}
  protected string par1 => _par1;
  protected string par2 => _par2;
}

[DataContract]
public class Test1 : TestBase
{
  private readonly string _par3;
  
  public Test1(string _par1, string _par2) : base (_par1, _par2)
  {
      _par3 = "AAAAA";
  }
  [DataMember] public string par3 => _par3;
  [DataMember] public string par1 => base.par1;
  [DataMember] public string par2 => base.par2;
  
}


отдавать всё и не париться
1 авг 17, 18:31    [20692712]     Ответить | Цитировать Сообщить модератору
Все форумы / WCF, Web Services, Remoting Ответить