当我使用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客户端会中断吗?
答案 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>