2015-12-12 21 views
7

Tôi đã bị mắc kẹt với điều này trong một thời gian và tôi dường như không thể tìm ra. Đánh giá cao sự giúp đỡ nào!ASP.NET WebAPI 2 Lồng nhau JSON

Đây là mô hình của tôi: http://www.jsoneditoronline.org/?id=9ee3466c40627f33c284e63544c8b8a7

Tôi có đúng đối tượng C# thiết lập như thế này:

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

tôi cần phải POST đối tượng này JSON toàn trực tiếp từ Controller MVC. Vào những dịp khác, tôi muốn PUT lịch biểu. Làm thế nào tôi có thể xử lý đúng cách này? Ví dụ thực sự có thể hữu ích.

Cảm ơn!

Tôi đã làm dưới đây để biết POST:

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

Đây là làm việc như mong đợi tuy nhiên, đôi khi liên quan Media đối tượng đã tồn tại trong cơ sở dữ liệu và nó đang gây ra một nội Server Error khi cố gắng INSERT sự cùng một đối tượng Media (đã tồn tại) - Số [Key] cho Media là thuộc tính hash.

+2

Theo như tôi có thể hiểu vấn đề thực tế của bạn không có liên quan gì đến MVC hoặc JSON. Bạn cần trợ giúp để tránh các lỗi vi phạm chính. Đúng không? –

+0

@KosalaW Sắp xếp vâng, Thay đổi khóa chính thành 'int id' giải quyết vấn đề này. Nhưng tái tạo lại cùng một đối tượng 'Media' hiện có trong cơ sở dữ liệu. Tôi không muốn các bản sao khi tôi đã có đối tượng ... – user1027620

+2

Vì vậy trước khi bạn chèn 'Media' vào bảng của mình, bạn cần kiểm tra xem' Media' có tồn tại trong bảng chưa. Nếu có, hãy cập nhật, nếu không hãy chèn. –

Trả lời

4

Bạn cần phải sắp xếp thứ tự lớp Ngày.

sử dụng gói phần mềm Newtonsoft.json nuget bạn cần để sắp xếp nó làm đối tượng. Nó sẽ tự động serialize đối tượng phức tạp để json

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

Cập nhật

Theo cập nhật serialize và deserialize bạn chức năng đang làm việc đúng cách. Bạn đang gặp sự cố khi chèn bản ghi trong Phương tiện. Hash không phải là duy nhất. và Hash Collision là có thể. Bạn cần phải cải thiện mã tạo mã băm để sử dụng hàm băm giống hệt nhau. Liên kết hữu ích để hiểu băm

+0

Đối tượng cha là loại ' Lịch biểu' - Vui lòng kiểm tra chỉnh sửa của tôi – user1027620

+0

Vui lòng kiểm tra câu trả lời cập nhật của tôi. Lượt như một câu trả lời nếu bạn thấy nó hữu ích. –

1

Bạn có thể sử dụng phương pháp mở rộng AddOrUpdate

using System.Data.Entity.Migrations; 

db.Schedule.AddOrUpdate(schedule) 
Các vấn đề liên quan