Базовый тип .NET не может быть сериализован WCF - PullRequest
6 голосов
/ 30 октября 2008

Я пишу службу WCF и хочу предоставить некоторые пользовательские элементы конфигурации (например, Custom ConfigurationSection и ConnectionStringSettings), чтобы я мог изменить конфигурацию службы.

Один из моих пользовательских элементов конфигурации наследуется от System.Configuration.ConfigurationElementCollection. Когда я пытаюсь запустить службу WCF, я получаю следующее сообщение об ошибке ...

Тип 'System.Configuration.ConfigurationElementCollection' не может быть сериализован. Попробуйте пометить его атрибутом DataContractAttribute и пометить все его элементы, которые вы хотите сериализовать, атрибутом DataMemberAttribute.

Есть ли способ реализовать DataContract для этого типа? Мой унаследованный класс помечен атрибутом [DataContract].

Ответы [ 2 ]

4 голосов
/ 05 марта 2010

Просто нажмите на эту проблему сегодня. Это сбивало с толку, потому что возникла проблема при переносе проекта с машины на машину. Эта статья кажется актуальной:

http://blogs.msdn.com/youssefm/archive/2009/08/10/serializing-plain-old-clr-objects-poco-types-with-datacontractserializer.aspx

Подводя итог, можно сказать, что в случае гниения ссылок проблема возникает во время выполнения 3.5 и исчезает во время выполнения 3.5 SP1.

1 голос
/ 31 октября 2008

Хорошо, в конце концов мне пришлось перестроить свое решение. Я нашел SerializableConfigurationSection наиболее выгодным. Это в шаблонах и практиках EnterpriseLibrary. Поэтому вместо того, чтобы пытаться передать свои разделы пользовательской конфигурации через WCF, я выполняю разделение / десериализацию вручную и пропускаю разделы конфигурации через WCF в виде строки.

...