2015-12-12 18 views
7

私はしばらくこのことに悩まされていました。助けをよろしく!私はPOSTにMVCコントローラから直接、この全体のJSONオブジェクトが必要ASP.NET WebAPI 2ネストされたJSON

public class Media 
{ 
    public string name { get; set; } 
    public string title { get; set; } 
    public string album { get; set; } 
    public string artist { get; set; } 
    public string length { get; set; } 
    public int bitrate { get; set; } 
    public double size { get; set; } 
    public string start_time { get; set; } 
    public string mimetype { get; set; } 
    public string hash { get; set; } 
} 

public class Playlist 
{ 
    public string name { get; set; } 
    public List<Media> media { get; set; } 
    public List<Graphics> graphics { get; set; } 
    public bool shuffle { get; set; } 
    public int volume { get; set; } 
    public string start_time { get; set; } 
    public string end_time { get; set; } 
} 

public class Day 
{ 
    public string name { get; set; } 
    public List<Playlist> playlists { get; set; } 
} 


public class Schedule 
{ 
    public List<Day> days { get; set; } 
    public string hash { get; set; } 
} 

:私はこのように設定し、適切なC#のオブジェクトを持ってhttp://www.jsoneditoronline.org/?id=9ee3466c40627f33c284e63544c8b8a7

は、これは私のモデルです。他の機会に私はPUTスケジュールをしたいと思います。どのようにこれを適切に処理できますか?例が本当に役立つかもしれません。

ありがとうございます!

私はすでにPOSTについては、以下をやってる:

var schedule = JsonConvert.DeserializeObject<Schedule>(model.ToString()); 

これが働いているが、予想通り、時には関連Mediaオブジェクトが既にデータベースに存在し、INSERTにしようとしたときには、内部サーバーエラーを引き起こしています同じMediaオブジェクト(すでに存在します) - Media[Key]hashプロパティです。

+2

あなたの実際の問題はMVCまたはJSONとは関係ありません。主キー違反エラーを回避するには、いくつかの助けが必要です。あれは正しいですか? –

+0

@KosalaW一種のええ、主キーを 'int id'に変更するとこれが解決されます。しかし、データベース内の同じ既存の 'Media'オブジェクトを再作成しました。私はすでにオブジェクトを持っているときに重複したくないです... – user1027620

+2

あなたのテーブルに 'Media'を挿入する前に、' Media'が既にテーブルに存在するかどうかを確認する必要があります。存在する場合は更新し、そうでない場合は挿入します。 –

答えて

4

Dayクラスをシリアライズする必要があります。

Newtonsoft.jsonのnugetパッケージを使用すると、オブジェクトとしてシリアル化する必要があります。それは自動的にJSON

List<Day> days = // list of days result 
var jsonData= JsonConvert.SerializeObject(days); 
return json(jsonData); 

更新します更新シリアライズとデシリアライズ機能が正常に動作しているあたりとして

に複雑なオブジェクトをシリアル化します。メディアにレコードを挿入する際に問題が発生しています。 ハッシュは一意ではありません。ハッシュ衝突が可能です。ハッシュを同一として使用するには、ハッシュ生成コードを改善する必要があります。 便利なリンクはあなたが拡張メソッドを使用することができます

+0

親オブジェクトのタイプは 'スケジュール ' - 私の編集を確認してください – user1027620

+0

私の更新された答えを確認してください。あなたが役に立つと分かったら、答えとしてヒットしてください。 –

1

ハッシュ理解するAddOrUpdate

using System.Data.Entity.Migrations; 

db.Schedule.AddOrUpdate(schedule) 
関連する問題