ASP.NET WebAPI 2 嵌套 JSON
ASP.NET WebAPI 2 Nested JSON
我已经被这个问题困扰了一段时间,但我似乎无法弄清楚。感谢任何帮助!
这是我的模型:http://www.jsoneditoronline.org/?id=9ee3466c40627f33c284e63544c8b8a7
我设置了正确的 C# 对象,如下所示:
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; }
}
我需要直接从 MVC 控制器 POST
整个 JSON 对象。在其他情况下,我想 PUT
安排。我该如何正确处理呢?例子真的很有帮助。
谢谢!
我已经在为 POST
执行以下操作:
var schedule = JsonConvert.DeserializeObject<Schedule>(model.ToString());
这按预期工作,但是,有时相关的 Media
对象已经存在于数据库中,并且在尝试 INSERT
相同的 Media
对象时导致内部服务器错误(已经存在) - Media
的 [Key]
是 hash
属性.
您需要连载 Day class。
使用 Newtonsoft.json nuget 包,您需要将其序列化为对象。它会自动将复杂对象序列化为 json
List<Day> days = // list of days result
var jsonData= JsonConvert.SerializeObject(days);
return json(jsonData);
更新
根据您的更新,序列化和反序列化功能工作正常。您在媒体中插入记录时遇到问题。
哈希不是唯一的。哈希冲突是可能的。您需要改进哈希生成代码以使用相同的哈希。
了解哈希的有用链接
- what is hash ? is it unique?
- Can 2 different string have the same hash code in C#
- Socks, birthdays and hash collisions
- 防止重复:哈希 Table vs. 字典 vs. 二进制搜索
树
可以使用扩展方法AddOrUpdate
using System.Data.Entity.Migrations;
db.Schedule.AddOrUpdate(schedule)
我已经被这个问题困扰了一段时间,但我似乎无法弄清楚。感谢任何帮助!
这是我的模型:http://www.jsoneditoronline.org/?id=9ee3466c40627f33c284e63544c8b8a7
我设置了正确的 C# 对象,如下所示:
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; }
}
我需要直接从 MVC 控制器 POST
整个 JSON 对象。在其他情况下,我想 PUT
安排。我该如何正确处理呢?例子真的很有帮助。
谢谢!
我已经在为 POST
执行以下操作:
var schedule = JsonConvert.DeserializeObject<Schedule>(model.ToString());
这按预期工作,但是,有时相关的 Media
对象已经存在于数据库中,并且在尝试 INSERT
相同的 Media
对象时导致内部服务器错误(已经存在) - Media
的 [Key]
是 hash
属性.
您需要连载 Day class。
使用 Newtonsoft.json nuget 包,您需要将其序列化为对象。它会自动将复杂对象序列化为 json
List<Day> days = // list of days result
var jsonData= JsonConvert.SerializeObject(days);
return json(jsonData);
更新
根据您的更新,序列化和反序列化功能工作正常。您在媒体中插入记录时遇到问题。 哈希不是唯一的。哈希冲突是可能的。您需要改进哈希生成代码以使用相同的哈希。 了解哈希的有用链接
- what is hash ? is it unique?
- Can 2 different string have the same hash code in C#
- Socks, birthdays and hash collisions
- 防止重复:哈希 Table vs. 字典 vs. 二进制搜索 树
可以使用扩展方法AddOrUpdate
using System.Data.Entity.Migrations;
db.Schedule.AddOrUpdate(schedule)