Элемент данных контракта данных WCF со словарем <строка, объект> - PullRequest
1 голос
/ 20 июля 2011

У меня есть контракт данных, который выглядит примерно так:

    [DataContract(Name = "MyResult", Namespace = "MyNamespace")]
    public class MyResult
    {
        [DataMember(Name = "MyValues", Order = 3)]
        public Dictionary<string, object> MyValues { get; set; }
    }

Когда я заполняю объект в Словаре простыми типами, такими как string, int и т. Д., Проблем нет.Если я добавлю туда более сложные объекты, такие как List (из строк), я получу следующую ошибку:

Произошла ошибка при получении ответа HTTP на - http://localhost:8081/externalwsapi. Это может быть связано с конечной точкой службыпривязка без использования протокола HTTP.Это также может быть связано с тем, что сервер прерывает контекст HTTP-запроса (возможно, из-за закрытия службы).Подробнее смотрите в журналах сервера.

Эта ошибка не имеет смысла, я, конечно, использую Http-привязку.Я считаю, что у меня есть ошибка сериализации, но как заставить ее работать?

Ответы [ 2 ]

1 голос
/ 20 июля 2011

Поскольку вы используете объект в качестве типа в своей коллекции, сериализатор WCF не может знать, каким он может быть, поэтому он не может сериализовать коллекцию.

Вы можете использовать KnownTypeAttribue, чтобы указать, какие виды объектов могут храниться в коллекции.

1 голос
/ 20 июля 2011

Мне кажется, я справился с этой проблемой, изменив сигнатуру с объекта на байт [] и выполняя сериализацию самостоятельно.Я думаю, что я использовал JSON.NET для этого.Прошло какое-то время.

Затем, на стороне вызывающего, я десериализовал полезную нагрузку до того, что хотел.
...