Web API扩展了List以及其他属性

时间:2013-07-05 14:02:10

标签: list generics asp.net-web-api

我喜欢在列表级别扩展具有其他属性的项目列表。 所以我可以给出List,Paging信息等的名称。

这是列表的示例对象项:

public class House
{
    public int Nummer { get; set; }
    public string Name { get; set; }
}

这是我的简单列表类 - 有一个额外的属性:

public class SimpleList : List<House>
{
  public string MyExtraProperty { get; set; }
}

这是我的Web Api控制器方法:

public class ValuesController : ApiController
{
    // GET api/values
    public SimpleList Get()
    {
        SimpleList houseList = new SimpleList {};
        houseList.Add(new House { Name = "Name of House", Nummer = 1 });
        houseList.Add(new House { Name = "Name of House", Nummer = 2 });
        houseList.MyExtraProperty = "MyExtraProperty value";

        return houseList;
    }
}

结果显示在XML中:

<ArrayOfHouse>
 <House><Name>Name of House</Name><Nummer>1</Nummer></House>
 <House><Name>Name of House</Name><Nummer>2</Nummer></House>
</ArrayOfHouse>

在Json [{“Nummer”:1,“Name”:“House of House”},{“Nummer”:2,“Name”:“House of House”}}

我的问题是如何解析MyExtraProperty 到结果?

我的迷你演示解决方案就在这里:https://dl.dropboxusercontent.com/u/638054/permanent/WebApiGenerics.zip

谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

最简单的方法是让List成为一个成员而不是SimpleList的超类

public class SimpleList 
{
    public List<House> Houses;
    public string MyExtraProperty { get; set; }
}

如果你只需要JSON,你可以通过装饰Newtonsoft JSON的模型来自己控制序列化:

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WebApiGenerics.Models
{
    [JsonObject(MemberSerialization = MemberSerialization.OptIn)]
    public class SimpleList : List<House>
    {
        [JsonProperty]
        public IEnumerable<House> Houses
        {
            get { return this.Select(x => x); }
        }

        [JsonProperty]
        public string MyExtraProperty { get; set; }
    }
}