相关疑难解决方法(0)

JSON.NET作为WebAPI 2 OData序列化程序与ODataMediaTypeFormatter

我正在尝试将JSON.NET用作WebAPI 2堆栈中的默认序列化程序.我已经实现了JsonMediaTypeFormatter,其中我使用了JSON.NET序列化程序来序列化/反序列化数据,并创建了JsonContentNegotiator来使用这种媒体类型格式化程序.除OData查询外所有工作正常 - 如果我添加[可查询]元数据ot动作方法,则响应对象不包含任何元数据信息,仅包含实体列表.

小例子.我的行动方法:

[Queryable]
public async Task<PageResult<RuleType>> GetRuleType(ODataQueryOptions<RuleType> options)
{
    var ret = await _service.ListRuleTypesAsync(options);
    return new PageResult<RuleType>(
        ret,
        Request.GetNextPageLink(),
        Request.GetInlineCount());
}
Run Code Online (Sandbox Code Playgroud)

如果我使用默认的OData序列化并按规则类型调用一些查询(例如 - .../odata/RuleType?$inlinecount=allpages&$skip=0&$top=1),我会收到带有元数据信息和计数属性的经典OData响应:

odata.metadata ".../odata/$metadata#RuleType" 
odata.count    "2" 
value
        0    {
                 Id: 1
             Name: "General"
             Code: "General"
             Notes: null
             }
Run Code Online (Sandbox Code Playgroud)

(某些领域跳过,但我有一个空值Notes属性),但如果我加上我JsonContentNegotiatorJsonMediaTypeFormatter一个串行-我只接收实体的名单:

[
  {
    "Id": 1,
    "Name": "General",
    "Code": "General"
  }
]
Run Code Online (Sandbox Code Playgroud)

(因为这里没有Notes字段NullValueHandling.Ignore)更多.如果我[Queryable]在动作方法中删除属性 - 我收到另一个结果:

{
  "Items": [
    {
      "Id": 1,
      "Name": "General",
      "Code": "General"
    }
  ],
  "Count": 2 …
Run Code Online (Sandbox Code Playgroud)

serialization json.net asp.net-web-api

18
推荐指数
2
解决办法
1万
查看次数

在webapi中使用OData来获取仅在运行时知道的属性

假设我有一个非常简单的类型,我想在OData feed上公开它作为使用.NET C#webapi控制器的集合的一部分:

public class Image
{
    /// <summary>
    /// Get the name of the image.
    /// </summary>
    public string Name { get; set; }

    public int Id { get; set; }

    internal System.IO.Stream GetProperty(string p)
    {
        throw new System.NotImplementedException();
    }

    private Dictionary<string, string> propBag = new Dictionary<string, string>();
    internal string GetIt(string p)
    {
        return propBag[p];
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的WebApiConfig.cs中,我做标准配置:

        ODataModelBuilder modelBuilder = new ODataConventionModelBuilder();
        var imagesES = modelBuilder.EntitySet<Image>("Images");
Run Code Online (Sandbox Code Playgroud)

根据Excel,这是一个很好的饲料.但在我的集合中,propBag包含其他数据的有限列表(例如"a","b"和"c"或类似).我希望它们是我的OData Feed中的额外属性.我的第一个想法是在配置发生时尝试这样的事情:

        ODataModelBuilder modelBuilder = new ODataConventionModelBuilder();
        var imagesES = modelBuilder.EntitySet<Image>("Images");
        images.EntityType.Property(c …
Run Code Online (Sandbox Code Playgroud)

c# odata asp.net-web-api

10
推荐指数
1
解决办法
7986
查看次数

从asp.net web api定制odata输出

我正在使用新的ASP.NET webapi odata(版本4.0.0,根据Nuget上次发布于2013年2月27日)

基本上我按照这里描述的那样做:http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api

我正在发布我的数据传输对象并创建了odata atom pub feed但我想对它有更多的控制权.主要是我希望能够做到以下几点:

  • 决定Feed的标题,作者和更新元素的内容
  • 决定是否拥有编辑链接
  • 改变什么显示在<category term="X"m:type子特性是在我的应用程序类.目前,他们使用完整的命名空间公开c#类名,但我不想公开它.

谢谢.

odata asp.net-web-api

8
推荐指数
1
解决办法
7266
查看次数

标签 统计

asp.net-web-api ×3

odata ×2

c# ×1

json.net ×1

serialization ×1