异常在asp.net中的WEBAPI控制器中获取db数据

时间:2014-06-24 07:04:09

标签: c# asp.net asp.net-web-api

我正在尝试使用webAPI将一些数据返回到客户端页面。请尝试从浏览器访问api /控制器时看到当前看到的异常

栈跟踪 System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeAndVerifyType(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, Boolean verifyKnownType, RuntimeTypeHandle declaredTypeHandle, Type declaredType) at System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithXsiTypeAtTopLevel(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle originalDeclaredTypeHandle, Type graphType) at System.Runtime.Serialization.DataContractSerializer.InternalWriteObjectContent(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver) at System.Runtime.Serialization.DataContractSerializer.InternalWriteObject(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver) at System.Runtime.Serialization.XmlObjectSerializer.WriteObjectHandleExceptions(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver) at System.Runtime.Serialization.DataContractSerializer.WriteObject(XmlWriter writer, Object graph) at System.Net.Http.Formatting.XmlMediaTypeFormatter.<>c__DisplayClass7.<WriteToStreamAsync>b__6() at System.Threading.Tasks.TaskHelpers.RunSynchronously(Action action, CancellationToken token)

返回引号的Controller GET方法是

    // GET api/<controller>
    private ForumDBDataContext db = new ForumDBDataContext(); 

    public dynamic GetQuotes()
    {
        var ret = (from qt in db.vwUsersQuotess.ToList()                      
                   select new
                   {
                       Message = qt.Desc,
                       Price= qt.price,
                       Qty = qt.Quantity
                   }).AsEnumerable();
        return ret;
    }

1 个答案:

答案 0 :(得分:0)

尝试使用ToList()代替AsEnumerable()

public dynamic GetQuotes()
    {
        var ret = (from qt in db.vwUsersQuotess                      
                   select new
                   {
                       Message = qt.Desc,
                       Price= qt.price,
                       Qty = qt.Quantity
                   }).ToList();
        return ret;
    }

如果您使用EntityFramework和SQL Server,您还可以删除对vwUsersQuotess.ToList()的调用并直接在SQL服务器上执行投影(选择新...),以便正在执行的查询仅检索必要的栏目(描述,价格和数量)。