我正在使用jquery插件http://envato-help.dotonpaper.net/booking-calendar-pro-jquery-plugin.html进行日历控件。
日历会返回JSON
,如下所示。
"YYYY-MM-DD":{"available": "", // Number of Available Items
"bind": 0, // Set if a day is a part of a group (0 = none; 1 = first day of a group; 2 = in the group; 3 = last day of a group)
"info": "", // Day informations
"notes": "", // Day notes
"price": "", // Price
"promo": "", // Promotional Price
"status": ""}, // Day status (none, available, booked, special, unavailable)
// Another day
"YYYY-MM-DD":{"available": "",
"bind": 0,
"info": "",
"notes": "",
"price": "",
"promo": "",
"status": ""}
我很难理解如何将其转换为对象,因为嵌套。日期不应该是名称,而不是实际数据吗?
我知道我可以使用这样的词典,
var serializer = new JavaScriptSerializer();
var result = serializer.DeserializeObject(s);
但我宁愿有一个合适的对象。可以用这个JSON字符串完成吗?
答案 0 :(得分:2)
首先,我建议使用Newtonsoft.Json而不是预先打包的JavaScriptSerializer,即使微软现在正在使用它,并且已经停止进入JavaScriptSerializer组件的进一步开发据我所知。 Newtonsoft.Json更快更容易使用。有关详细信息,请参阅http://james.newtonking.com/json。
无论您选择哪种序列化程序,都可以对两者应用以下内容(可能某些类/方法名称不同):
我认为这里最简单的方法是声明Dictionary<string, DayInfo>
并尝试使用Deserialize<T>
方法而不是DeserializeObject
对其进行反序列化。
您需要自己定义一个DayInfo
类,其中包含您希望反序列化的所有属性,可能包含所有这些属性,例如:
public class DayInfo {
public string Available { get; set; } // would map to the "available" property in the JSON
public int Bind { get; set; } // would map to the "bind" property in the JSON
// ...
}
您需要确保在DayInfo
上定义的属性类型正确。
反序列化应该是:
var dictionary = serializer.Deserialize<Dictionary<string, DayInfo>>(jsonString);
将JSON反序列化为Dictionary<string, DayInfo>
后,您仍然可以应用进一步的转换以转换为您认为的正确对象。
答案 1 :(得分:0)
感谢PermaFrost的answer生成的代码。
public class DayInfo
{
public string Available { get; set; }
public int Bind { get; set; }
public string Info { get; set; }
public string Notes { get; set; }
public string Price { get; set; }
public string Promo { get; set; }
public string Status { get; set; }
}
....然后......
using Newtonsoft.Json;
[HttpPost]
public void SaveCalendarData()
{
string json = Request.Form["dopbcp_schedule"];
Dictionary<string, DayInfo> calendarData = JsonConvert.DeserializeObject<Dictionary<string, DayInfo>>(json);
// Process dictionary...
}
在html / javascript中
$(document).ready(function () {
/* Set up the calendar */
$('#backend').DOPBackendBookingCalendarPRO({
'SaveURL': '/Calendar/SaveCalendarData'
});
// Code omitted....