Я хочу передать довольно общий набор данных через метод WCF. Данные в основном представляют собой просто иерархический набор пар ключ / значение, но они вложены в произвольный уровень. Первоначально я думал о передаче его в виде одной строки и выполнении XML, JSON или аналогичного кодирования / декодирования на любом конце, но поскольку транспорт WCF является XML, в любом случае это выглядит немного глупо, поэтому я надеюсь, что есть способ передать его "естественно".
Метод довольно прост:
[OperationContract]
void ProcessData(DataTree tree);
с:
public class DataTree : Dictionary<string, DataTree>
{
}
Все это прекрасно компилируется, но когда я пытаюсь запустить службу, происходит сбой с StackOverflowException в DataContract.GetStableName.
Я пытался поместить атрибут [CollectionDataContract]
в класс DataTree
и явно указать все имена, но, похоже, это не имело никакого значения.
Я также пытался поставить на него [DataContract]
, но потом он терпит неудачу еще раньше, потому что Dictionary
- это ISerializable
.
Есть идеи? Есть ли лучший способ сделать это?