powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Ошибка десериализации параметра
1 сообщений из 1, страница 1 из 1
Ошибка десериализации параметра
    #38042825
Lexxxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется простенький сервис:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
[ServiceContract]
    public interface IMyService
    {
        [OperationContract]
        Category MyMethod(int i);

        [OperationContract]
        void Save(Category i);
    }

    [ServiceBehavior(IncludeExceptionDetailInFaults = true)]
    public class MyService : IMyService
    {
        public MyService(IRepository<object> repository) { }

        public Category MyMethod(int i) { Console.WriteLine("Parameter i = " + i); return new Category(); }

        public void Save(Category category) { Console.WriteLine("Category saved"); }
    }



и класс сущности:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
namespace WCFServer
{
    public class Category
    {
        private IList<Category> childCategories = new List<Category>();
        private Category parentCategory;

        public IEnumerable<Category> ChildCategories { get { return this.childCategories; } }

        public virtual Category ParentCategory
        {
            get { return this.parentCategory; }
            set { this.parentCategory = value; }
        }
    }
}



при выполнении кода на клиенте:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
class Program
    {
        static void Main(string[] args)
        {
            var service = new MyServiceClient();
            var c = service.MyMethod(5);
            var cat = new Category();
            service.Save(cat);//  Исключение!!!
            Console.WriteLine("Stop");
            Console.ReadKey();
        }
    }



получаем исключение:

Форматтер сгенерировал исключение при попытке десериализовать сообщение: Ошибка десериализации параметра http://tempuri.org/:i. Сообщение InnerException было "Использование типа "WCFServer.Category" как коллекции только для чтения не поддерживается при использовании объекта NetDataContractSerializer. Рекомендуется отметить этот тип с помощью атрибута CollectionDataContractAttribute или SerializableAttribute либо добавить к свойству метод задания.". Подробнее см. InnerException.

Если из сущности удалить любое одно из свойств, ошибка пропадет. Помечать класс атрибутом SerializableAttribute не хотелось бы, так как в реальном приложении класс будет посложнее и придется много полей помечать как несериализуемые, а кроме того имена свойств на клиенте становятся изуродованными.
Как побороть проблему и почему именно когда оба свойства присутствуют в классе появляются проблемы?
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Ошибка десериализации параметра
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]