【发布时间】:2012-10-01 12:56:09
【问题描述】:
如何使用 Web API (JSON.Net) 反序列化以下 JSON?:
{
"action": "edit",
"table": "MainView",
"id": "row_1377",
"_group_id": "999",
"data": {
"ROTATION": "1", // This name/val can change
"EQUIPMENT": [{
"id": "6"
},
{
"id": "8"
}],
"NOTES": ""
}
}
data 中的值代表列并且可以更改,因此我无法使用例如一个名为“NOTES”的字符串,如json.net deserialize string to nested class。
注意EQUIPMENT 包含多个值。当它以前只是像NOTES 这样的“字符串:字符串”时,这个JSON 将data 反序列化为Dictionary<string, string>,但现在我需要它像自己的字典一样工作。我最后一次尝试是反序列化为以下类型:
public class EditorSubmissionJoined
{
public string _group_id { get; set; }
public string action { get; set; }
public string table { get; set; }
public string id { get; set; }
// "public" added below due to mistake noticed by Maggie Ying
public Dictionary<string, object> data { get; set; } // Trouble
}
我希望object 可以包含data 中的任何内容,无论是KeyValuePair(如NOTES)还是字典(如EQUIPMENT)。
我也试过Dictionary<string, ICollection<Object>>、Object,甚至ICollection<Dictionary<string, Object>>。
问题是我的控制器 总是 得到 EditorSubmissionJoined,但只有空值:
public void Put(EditorSubmissionJoined ajaxSubmission) {
// ajaxSubmission has only NULL values
}
【问题讨论】:
-
您应该能够反序列化为动态:stackoverflow.com/questions/4535840/…
标签: c# asp.net-mvc-4 asp.net-web-api json.net