2013-07-05 2 views
3

Мне нравится расширять список объектов с дополнительными свойствами на уровне списка. Так что я могу дать имя списка, пейджинг информации и т.д.Расширение веб-API с дополнительными свойствами

Это пример объекта элемент для списка:

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

Это мой простой класс List - с одним дополнительным свойством:

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, "Имя": "Название Дом"}, { "Nummer": 2, "Имя": "Имя House "}

Мой вопрос: Как я могу получить MyExtraProperty проанализированный?

мой мини демо решение поиграть здесь: https://dl.dropboxusercontent.com/u/638054/permanent/WebApiGenerics.zip

Thx за вашу помощь!

ответ

0

Самый простой способ, чтобы ваш список быть членом не суперкласс 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; } 
    } 
} 
Смежные вопросы