У меня есть служба, которая реализует следующий DataMember:
[DataMember]
public Dictionary<string, List<IOptionQueryResult>> QueryResultItems { get; set; }
У меня есть класс "OptionQuerySingleResult", который наследуется от IOptionQueryResult.Теперь я понимаю, что мне нужно сделать тип OptionQueryResult «известным» для Службы, и поэтому я попытался добавить KnownType различными способами:
[KnownType(typeof(Dictionary<string, OptionQuerySingleResult[]>))]
[KnownType(typeof(Dictionary<string, List<OptionQuerySingleResult>>))]
[KnownType(typeof(OptionQuerySingleResult)]
Однако ни один из этих подходов не работал и на стороне клиента.Я либо получаю, что десериализация завершилась неудачно, либо сервер просто прервал запрос, вызвав ошибку прерванного соединения.
У кого-нибудь есть идеи о том, как правильно заставить это работать?Я хотел бы добавить, что если я изменю определение QueryResultItems, чтобы использовать конкретный тип вместо интерфейса, все будет работать просто отлично.
Спасибо,
Том
Изменить: Исключение, которое я получаю:
Ошибка в строке 1 позиции 524. Элемент 'http://schemas.microsoft.com/2003/10/Serialization/Arrays:anyType' содержит данные из типа, который сопоставляется с именем': OptionQuerySingleResult '.Десериализатор не знает ни одного типа, который сопоставляется с этим именем.Попробуйте использовать DataContractResolver или добавить тип, соответствующий OptionQuerySingleResult, в список известных типов - например, с помощью атрибута KnownTypeAttribute или добавив его в список известных типов, передаваемых DataContractSerializer.
Однакокогда я смотрю на клиентский прокси, который генерирует svcutil, в нем определенно определяется «OptionQuerySingleResult»:
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="OptionQuerySingleResult", Namespace="")]
[System.SerializableAttribute()]
public partial class OptionQuerySingleResult : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged