3

リスト レベルで追加のプロパティを使用してアイテムのリストを拡張するのが好きです。そのため、リストの名前、ページング情報などを指定できます。

これは、リストのサンプル オブジェクト アイテムです。

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

これは私の単純なリスト クラスです - 追加のプロパティが 1 つあります。

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":"家の名前"},{"Nummer":2,"Name":"家の名前"}]

私の質問は、MyExtraPropertyを結果に解析するにはどうすればよいですか?

私のミニ デモ ソリューションはこちら: https://dl.dropboxusercontent.com/u/638054/permanent/WebApiGenerics.zip

助けてくれてありがとう!

4

1 に答える 1

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; }
    }
}
于 2013-07-05T16:56:33.150 に答える