1

自動生成されたモデルとコントローラーで C# の MVC 4 API と Entity Framework 4 を使用しています。JSONにシリアライズしている親子関係があります。私のリレーションは正常にシリアル化されていますが、オブジェクト全体ではなく、ネストされた子の ID のみを表示したいと考えています。

これは、現在取得している JSON 応答です。

[{
    "ID": 1,
    "NAME": "PARENT1",
    "CHILDREN": [{
        "ID": "1",
        "NAME": "CHILD1"
    },{
        "ID": "2",
        "NAME": "CHILD2"
    }]
}]

そして、これは私が手に入れたいものです。

[{
    "ID": 1,
    "NAME": "PARENT1",
    "CHILDREN": [1,2]
}]

これらは私が使用しているモデルのようなものです。

public partial class PARENT
{
    public PARENT()
    {
        this.CHILDREN = new List<CHILD>();
    }

    public int ID { get; set; }
    public string NAME { get; set; }
    public virtual ICollection<CHILD> CHILDREN { get; set; }
}

public partial class CHILD
{
    public CHILD(){}

    public int ID { get; set; }
    public string NAME { get; set; }
    public int PARENT_ID { get; set; }
}

私のコントローラーメソッド。

// GET api/Parents
public IEnumerable<PARENT> GetPARENTs()
{
    return db.PARENTS.AsEnumerable();
}

何を探しているのかわからないので、どんな助けでも大歓迎です。私は EF と .NET の MVC にかなり慣れていませんが、これはかなり簡単にできるように思えます。

よろしくお願いします。:)

4

3 に答える 3

0

より複雑な方法は、カスタム xml シリアル化を使用する独自のカスタムメディア フォーマッタを使用することです。

于 2013-04-01T11:12:31.863 に答える
0

参考までに、これは私がこれを行うために考え出した別の方法です。ほとんどの人は動的の使用を承認しませんが、これを複数の関係で使用し、オブジェクトのタイプを毎回指定したくないので、魅力的に機能しました。

public class CollectionOfIds : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return true;
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        return null;
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        IList collection = (IList)value;
        List<int> ids = new List<int>();
        foreach (var item in collection)
        {
            dynamic itemCollection = (dynamic)item;
            ids.Add(itemCollection.ID);
        }
        serializer.Serialize(writer, ids);
    }
}

モデル属性をそのまま装飾した後...

public partial class PARENT
{
    public PARENT()
    {
        this.CHILDREN = new List<CHILD>();
    }

    public int ID { get; set; }
    public string NAME { get; set; }
    [JsonConverter(typeof(CollectionOfIds))]
    public virtual ICollection<CHILD> CHILDREN { get; set; }
}
于 2013-04-02T13:38:50.203 に答える
0

必要なのは単純な LINQ だけだと思います。

IList<PARENT> parents; // I assume you have a list of PARENT fetched from DB

var results = parents.Select(
      p => new 
      { 
          ID = p.ID, NAME = p.NAME, 
          CHILDS = p.CHILDREN.Select(a=>a.ID).ToList() 
      }).ToList();

return Json(results);
于 2013-04-01T10:03:17.220 に答える