У меня проблема с передачей списка определенных приложением объектов службам RIA. Я получаю сообщение об ошибке: «Параметры фильтра« Ошибка »записи операции домена« GetPagedExams »должны быть одного из предопределенных сериализуемых типов».
Вот запрос в DomainService:
[Query]
public IQueryable<ExamEntity> GetPagedExams(int first, int pageSize, List<FilterOptions> filters, List<string> sortDescriptions)
{
return Context.Exams.GetPagedExams(first, pageSize, filters, sortDescriptions).Data.AsQueryable();
}
Класс параметров фильтра определяется как:
[DataContract]
[Serializable]
public class FilterOptions
{
public enum FilterAction
{
Equals,
NotEquals,
LessThan,
LessThanOrEquals,
GreaterThan,
GreaterThanOrEquals,
Like,
NotLike,
IsNull,
IsNotNull
}
[DataMember]
[Key]
public string FieldName
{ get; set; }
[DataMember]
public FilterAction FilterOp
{ get; set; }
[DataMember]
public object FieldValue
{ get; set; }
}
Добавление атрибутов DataContract и DataMember не помогло.
Мне нужно передать переменное число фильтрующих ограничений, которые будут собраны как часть SQL-запроса на стороне сервера, поэтому список объектов просто необходим. (Да, это неформатированный SQL, а база данных может быть либо SQL Server, либо Oracle. Поэтому я не могу использовать LINQ, и клиент Silverlight не может знать, какую базу данных я использую.)
Есть предложения? Я просто собираюсь передать XML-сериализацию от клиента и повторно выполнить ее на сервере. Это действительно не мой предпочтительный вариант ....
Это был рабочий запрос, когда я передавал одну строку для фильтра, а не для коллекции. Так что я знаю, что проблема строго в пользовательской коллекции.