WCF为DataContracts生成名称的逻辑是什么

时间:2010-11-15 22:49:52

标签: wcf soap

当我使用WCF将DataContract公开为SOAP wevservice时,我会得到一些时髦的生成名称,例如:

[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 :(得分:0)

对我来说看起来有点随机。我不知道这个恐惧是否是随机的,并且会受到破坏合同的变化。

但是如果你正在寻找不那么有趣的WSDL,一种解决方法(来自here)是对字典进行子类化并使用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>