Как указать WCF известный тип в конфигурации, которая универсальна?

На сегодняшний день в Neo4j Desktop версии: 1.1.10 и версии БД: 3.4.7 Удаление данных + удаление индекса + удаление любых уникальных ограничений + Разработчик> Обновить удаляет все метки

8
задан Drew Noakes 4 July 2009 в 17:54
поделиться

2 ответа

Универсальный тип может быть создан из строки, если строка следует этому шаблону: Имя класса, за которым следует символ "", за которым следует количество параметров типа (в данном случае это 1), за которым следуют параметры типа, заключенные в "[]", и использование запятой в качестве разделителя параметров типа .

<configuration>
  <system.runtime.serialization>
    <dataContractSerializer>
      <declaredTypes>
        <add type="Wrapper, TheirAssembly">
          <!-- this syntax is all good -->
          <knownType type="Data`1[System.Int32], MyAssembly"/>
          <knownType type="Data`1[System.Int64], MyAssembly"/>
        </add>
      </declaredTypes>
    </dataContractSerializer>
  </system.runtime.serialization>
</configuration>

Edit: я мог бы также добавить, что если информация о сборке должна быть указана для параметров типа (хотя это не относится к материалам в mscorlib), то используется вложенный «[]».

<knownType type="Data`1[[System.Int32, mscorlib]], MyAssembly"/>

Edit: You может настраивать имена универсальных типов в контрактах данных, используя шаблон строкового формата.

[DataContract(Name = "Data{0}")]
public class Data<TKey>
{...}

По умолчанию имя, сгенерированное для типа Data , выглядит как «DataOfInt32HJ67AK7Y», где «HJ67AK7Y» это хеш, созданный из строки urn: default или пространства имен вашего класса, если оно у вас есть. Но «Data {0}» даст ему имя «DataInt32».

Подробнее здесь . Взгляните на раздел «Настройка имен контрактов данных для универсальных типов» внизу страницы.

18
ответ дан 5 December 2019 в 07:13
поделиться

Из здесь ...

Известно типы также могут быть определены в конфигурации как показано ниже.

<configuration>
  <system.runtime.serialization>
    <dataContractSerializer>
      <declaredTypes>
         <add type="MyCompany.Library.Shape`1,
              MyAssembly, Version=2.0.0.0, Culture=neutral,
              PublicKeyToken=XXXXXX, processorArchitecture=MSIL">
            <knownType type="MyCompany.Library.Circle`1,
                       MyAssembly, Version=2.0.0.0, Culture=neutral,
                       PublicKeyToken=XXXXXX, processorArchitecture=MSIL">
                    <parameter index="0"/>
            </knownType>
         </add>
      </declaredTypes>
    </dataContractSerializer>
  </system.runtime.serialization>
</configuration>

Приведенная выше конфигурация указывает, что общий параметр для Circle - это то же, что и общий параметр для объявленный тип Shape. Конфигурация позволяет определение известного типа произвольная сложность. Например, если необходимо определить Круг <Словарь <строка, T >> в качестве известный тип Shape (конечно, это чисто академический) это можно сделать как

<configuration>
  <system.runtime.serialization>
    <dataContractSerializer>
      <declaredTypes>
         <add type="MyCompany.Library.Shape`1,
              MyAssembly, Version=2.0.0.0, Culture=neutral,
              PublicKeyToken=XXXXXX, processorArchitecture=MSIL">
            <knownType type="MyCompany.Library.Circle`1,
                       MyAssembly, Version=2.0.0.0, Culture=neutral,
                       PublicKeyToken=XXXXXX, processorArchitecture=MSIL">
                   <parameter type="System.Collections.Generic.Dictionary`2">
                      <parameter type="System.String"/>
                      <parameter index="0"/>
                   </parameter>                
            </knownType>
         </add>
      </declaredTypes>
    </dataContractSerializer>
  </system.runtime.serialization>
</configuration>

Обратите внимание на использование элемента конфигурации. «Параметр» с атрибутами «тип» и 'index'.

5
ответ дан 5 December 2019 в 07:13
поделиться
Другие вопросы по тегам:

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