Какая логика стоит за сгенерированными WCF именами для DataContracts - PullRequest
2 голосов
/ 16 ноября 2010

Когда я использую WCF для представления DataContract в качестве сервисной службы SOAP, я получаю несколько необычных имен, таких как:

[Flags]
public enum EnumType1
{
    EnumMember1 = 1;
    EnumMember2 = 2;
    EnumMember3 = 4;
}

[DataMember]
private Dictionary< EnumType1, Class1>  Class1Dictionary;

Имеет это мыльное представление по проводу: (Я перефразирую):

<Class1Dictionary>
    <KeyValueOfEnumType1Class1UTLV0zE5>
        <Key>EnumMember1 </Key>
        <Value> ... </Value>
    </KeyValueOfEnumType1Class1UTLV0zE5>
</Class1Dictionary>

В чем логика KeyValueOfEnumType1Class1UTLV0zE5? Я могу объяснить часть KeyValueOfEnumType1Class1, но откуда взялся UTLV0zE5? Кроме того, сломается ли клиент WCF, если эта произвольная строка начисляется?

1 Ответ

0 голосов
/ 16 ноября 2010

Это выглядит немного случайным для меня. Я не знаю, является ли фанк случайным и подвержен ли изменениям, которые нарушают контракты.

Но если вы ищете менее забавный WSDL, обходной путь (от здесь ) заключается в создании подкласса словаря и использовании CollectionDataContractAttribute для переопределения вывода во время сериализации:

[CollectionDataContract(
    Name="MyDictionary", ItemName="Items", KeyName="Key", ValueName="Value")]
public class MyDictionary: Dictionary<EnumType1, Class1>
{        
}

Должен генерировать XML как:

<MyDictionary> 
    <Items> 
        <Key>EnumMember1</Key> 
        <Value> ... </Value> 
    </Items> 
</MyDictionary> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...