2015-12-12 15 views
7

Sono rimasto bloccato per un po 'e non riesco a capirlo. Apprezzo qualsiasi aiuto!ASP.NET WebAPI 2 Nested JSON

Questo è il mio modello: http://www.jsoneditoronline.org/?id=9ee3466c40627f33c284e63544c8b8a7

ho gli oggetti C# corretta messa in questo modo:

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; } 
} 

ho bisogno di tutta questa POST JSON oggetto direttamente dal controller MVC. In altre occasioni mi piacerebbe PUT il programma. Come posso gestirlo correttamente? Gli esempi potrebbero davvero aiutare.

Grazie!

sto già facendo il sotto per POST:

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

Questo funziona come previsto tuttavia, a volte legati Media oggetti già presenti nel database e sta causando un errore interno del server quando si cerca di INSERT il stesso oggetto Media (che già esiste) - [Key] per Media è la proprietà hash.

+2

Per quanto posso capire il tuo problema reale non ha nulla a che fare con MVC o JSON. Hai bisogno di aiuto per evitare errori di violazione della chiave primaria. È corretto? –

+0

@KosalaW Sort of yeah, cambiando la chiave primaria in un 'int id' lo risolve. Ma ricreato di nuovo lo stesso oggetto 'Media' nel database. Non voglio duplicati quando ho già l'oggetto ... – user1027620

+2

Quindi, prima di inserire 'Media' nella tua tabella, devi controllare se questo' Media' esiste già nella tabella. Se lo fa, aggiornalo, altrimenti inserisci. –

risposta

4

È necessario serializzare la classe Day.

utilizzando il pacchetto Newtonsoft.json nuget è necessario serializzarlo come oggetto. Sarà serializzare automaticamente oggetto complesso a JSON

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

Aggiornamento

Come per le funzioni di aggiornamento serializzare e deserializzare funzionino correttamente. Si sta affrontando un problema durante l'inserimento di record in Media. Hash non è univoco. e Hash Collision è possibile. È necessario migliorare il codice di generazione hash per utilizzare l'hash come identico. Link utili per capire hash

+0

L'oggetto genitore è di tipo ' Programma - Si prega di controllare la mia modifica – user1027620

+0

Si prega di controllare la mia risposta aggiornata. Colpisci come risposta se lo trovi utile. –

1

È possibile utilizzare il metodo di estensione AddOrUpdate

using System.Data.Entity.Migrations; 

db.Schedule.AddOrUpdate(schedule)