【发布时间】:2011-07-25 07:05:03
【问题描述】:
好的,所以我使用的是 MVC 3,它非常擅长将 JSON 数据集反序列化为传递给我的控制器操作的强类型对象。不幸的是,我还没有找到更动态的案例的解决方案。
内置的 Json 反序列化和类是否支持“未定义”属性集?例如,假设我有一些固定数据,例如姓名和年龄,但我还想传递一个动态创建的评分列表,用户可以在其中输入(或选择)电影并在表格中设置评分值。
模型数据结构可能是这样的:
public class UserRatings
{
public string Name { get; set; }
public int Age { get; set; }
public Dictionary<string,int> Ratings { get; set; }
}
但假设我的 Json 数据集在 javascript 中看起来像这样:
var data = { Name: name, Age: age, Ratings: rating };
其中 rating 变量是一个动态构造的对象,由作为 key 的电影的名称(或 id)和作为数字的 rating 组成。在控制器操作中对此的反序列化自然不会成功,因为它不理解 Ratings 到相当复杂的字典对象的映射。但是是否有一个通用的 Json 集合可以用来代替 Ratings 作为中间格式?
我尝试在 javascript 中将 Ratings 对象设置为 Json 字符串,然后只发送一个字符串,但我找不到“工厂”或可以在 C# 中创建 Json 结构的东西,我可以通过迭代来获得数据出来。在这方面,Json 和 JsonResult 类似乎对我没有帮助。基本上如何使用 MVC 中内置的 Json 支持将我自己的反序列化为一些通用的 Json 集合对象?
【问题讨论】:
-
只是想评论一下,到目前为止,我的解决方案是将 Ratings 设为字符串类型,并在客户端上对评级对象执行 JSON.stringify 并将其作为一个字符串属性发送。然后它们都直接映射到 POCO。然后,我去掉评级字符串的所有转义字符,留下一个 json 字符串,JavaScriptSerialiser 能够将其转换为 Dictionary
,我可以在其中迭代它们并更新数据库。它有点乱,但它的工作原理。非常感谢任何建议。
标签: c# javascript asp.net-mvc json