WCF服务 - 序列化Linq参数

ca8*_*msm 6 c# wcf serialization

我有一个简单的课程:

[DataContract]
public class Book
{
    [DataMember]
    public Int32 ID { get; set; }

    [DataMember]
    public Nullable<Int32> AuthorID { get; set; }     
}
Run Code Online (Sandbox Code Playgroud)

通过WCF服务检索哪个,如:

public class BookService : IBookService
    {
        IService _service;

        public BookService()
        {
            _service = new BookService();
        }

        public IEnumerable<Book> GetBooks()
        {
            var Books = _service.GetBooks();
            return Books;
        }                
    }
Run Code Online (Sandbox Code Playgroud)

我现在想扩展它以包含一个额外的函数,该函数允许LINQ查询在Book类中包含其他属性(未在上面的缩减示例中显示).这个函数(在MVC应用程序中包含和调用时有效)是:

    public IEnumerable<Book> GetBooks(params Expression<Func<Book, object>>[] includes)
    {
        var Books = _service.GetBooks(Expression<Func<Book, object>>[]>(includes));
        return Books;
    }
Run Code Online (Sandbox Code Playgroud)

但是,从WCF服务运行时,由于无法序列化,因此会生成错误:

System.ServiceModel.Description.DataContractSerializerOperationBehavior contract:http:1[System.Func//tempuri.org/:IBookService ----> System.Runtime.Serialization.InvalidDataContractException:输入'System.Linq.Expressions.Expression 2 [Foo.Book,System.Object ]]'无法序列化.请考虑使用DataContractAttribute属性对其进行标记,并使用DataMemberAttribute属性标记要序列化的所有成员.如果类型是集合,请考虑使用CollectionDataContractAttribute对其进行标记.

我将DataContract/DataMember属性添加到类中以便可以序列化,但是我不确定我需要做什么来允许函数参数被序列化.

任何人都有关于我可以做什么的想法,以允许在WCF服务中使用此功能?

Ben*_*aci 0

这可能与使用Expression有关吗?:

为什么要使用 Expression<Func<T>> 而不是 Func<T>?