Я хотел бы попросить вас о помощи. У меня есть проблема с десериализацией WCF для словаря, в которой в качестве ключа используется тип Enum.
У меня есть два объекта данных:
[DataContract]
public enum MyEnum : int
{
[EnumMember]
Value1 = 0,
[EnumMember]
Value2 = 1
}
и
[DataContract]
[KnownType(typeof(MyEnum))]
public class ReturnData
{
[DataMember]
public IDictionary<Enum, string> codes;
}
На самом деле ReturnData
класс содержит больше элементов данных, но они не важны для моего примера.
Эти объекты данных возвращаются методом:
[OperationContract]
public ReturnData Method1()
{
ReturnData data = new ReturnData();
data.codes = new Dictionary<Enum, string>();
data.codes.Add(MyEnum.Value1, "stringA");
return data;
}
Когда я вызываю Method1 со стороны клиента, выдается следующее исключение:
Средство форматирования выдало исключение при попытке десериализации сообщения: при попытке десериализации параметра произошла ошибка http://tempuri.org/:Method1Result. Сообщение InnerException было «Ошибка в строке 1, позиция 522. Элемент» http://schemas.microsoft.com/2003/10/Serialization/Arrays:Key' содержит данные контракта с данными http://schemas.datacontract.org/2004/07/AMService:MyEnum'. Десериализатор не знает ни одного типа, который соответствует этому контракту. Добавьте тип, соответствующий «MyEnum», в список известных типов, например, с помощью атрибута KnownTypeAttribute или добавив его в список известных типов, передаваемых в DataContractSerializer. '
Есть идеи, как определить класс ReturnData для решения этой проблемы?
Примечание: Когда я заменяю ReturnData
member codes
на использование в качестве ключевого типа данных MyEnum
вместо Enum
public IDictionary<MyEnum, string> codes;
, десериализация работает правильно, и данные без проблем передаются со стороны сервера на сторону клиента. 1034 *
Спасибо за вашу помощь.