过去一小时我一直在尝试而且无法得到它。此时我的控制器看起来像
public ActionResult GenerateMasterLink (string assetsJSON)
{
...
}
并且我已经确认它正在传递像
这样的字符串[["Microsoft","Azure","roman_column.png"],["Microsoft","Azure","runphp.cmd"],["Microsoft","Azure","runphp.cmd"],["Microsoft","Azure","Picture1.png"],["Microsoft","Azure","vertical-align-scrnsht.png"],["Microsoft","Azure","vertical-align-scrnsht.png"]]
我唯一的问题是如何从中获取该死的东西!
我尝试过创建课程
public class ThreePartKey
{
public string organizationName { get; set; }
public string categoryName { get; set; }
public string fileName { get; set; }
}
然后完成
ThreePartKey [] assetList = new JavaScriptSerializer().Deserialize<ThreePartKey []>(assetsJSON);
给了我
无法加载资源:服务器响应状态为500 (内部服务器错误)
在某些时间在我的浏览器控制台中,有时则给我
其他信息:输入 &#39; AllyPortal.Controllers.SurfaceAssetsController + ThreePartKey&#39;不是 支持对数组进行反序列化。
作为Visual Studio错误。
我已经尝试了一百万件事情并且无法做到这一点。我想要的只是在一些C#数据结构中使用JSON,我可以在我的控制器中实际使用它。有什么建议吗?
答案 0 :(得分:3)
您正在尝试反序列化为不兼容的模型。您可以将字符串输入反序列化为string [] []变量,但为了允许反序列化为ThreePartKey,您需要为每个属性命名这些值: [[organizationName:“Microsoft”,...]] 这会将正确的值复制到您的模型
答案 1 :(得分:2)
问题是您的目标数据类型与源数据类型不匹配。
如果要转换字符串数组的数组,则必须反序列化为另一个字符串数组,只有它们,您才能将其转换为您想要的任何字符串:
简而言之,替换
ThreePartKey [] assetList = new JavaScriptSerializer().Deserialize<ThreePartKey []>(assetsJSON);
的
ThreePartKey[] assetList = new JavaScriptSerializer().Deserialize<string[][]>(assetsJSON)
.Select(el => new ThreePartKey() {organizationName = el[0], categoryName = el[1], fileName = el[2]})
.ToArray();