【问题标题】:Odata serialization error for SingleResult.Create on an empty IQueryableSingleResult.Create 在空的 IQueryable 上的 Odata 序列化错误
【发布时间】:2016-06-05 01:35:58
【问题描述】:

我正在使用 OData v4 并试图让一个非常简单的控制器工作:

控制器:

public class ProductController : ODataController
{
readonly MasterDataEntities db = new MasterDataEntities();

[EnableQuery(PageSize = MaxPageSize)]
public IQueryable<Product> Get()
{
    return db.Products;
}

[EnableQuery]
public SingleResult<Product> Get([FromODataUri] string key)
{
    return SingleResult.Create(db.Products.Where(p => p.Code == key));
}
}

WebApiConfig:

ODataModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Product>("Product");
builder.EntityType<Product>().HasKey(p => p.Code);
config.MapODataServiceRoute("ODataRoute", null, builder.GetEdmModel());

当我调用 servicelocation/Product('abc') 时

如果 abc 是有效代码,我会得到一个很好的 JSON 序列化 Product 对象

如果 abc 是无效代码,我会收到以下错误:

'SingleResult`1' 无法使用 ODataMediaTypeFormatter 进行序列化。

at System.Web.OData.Formatter.ODataMediaTypeFormatter.GetSerializer(Type type, Object value, IEdmModel model, ODataSerializerProvider serializerProvider)

我现在花了 2 天时间寻找解决方案,但似乎没有其他人遇到这个问题?

【问题讨论】:

    标签: c# serialization asp.net-web-api odata iqueryable


    【解决方案1】:

    请查看此解决方法here

    当 SingleResult 类型不包含任何结果并将其替换为 404 而不是引发 SerializationException 时,该解决方法将识别。

    【讨论】:

    • 绝对传奇!昨天应该问这个哈哈!谢谢一百万
    • 我遇到了这个解决方法的问题。如果使用其中一个 SingleResults 为空的 $batch 请求,它将为整个 $batch 而不是那部分返回 404。
    • 有人可以解释一下如何使用解决方法的步骤吗?我是 .NET 新手会有所帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    • 2014-02-19
    • 2020-06-24
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    相关资源
    最近更新 更多