如何将字符串数组的JavaScript数组转换为C#数据结构?

时间:2015-05-18 22:33:46

标签: javascript c# arrays json asp.net-mvc

过去一小时我一直在尝试而且无法得到它。此时我的控制器看起来像

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,我可以在我的控制器中实际使用它。有什么建议吗?

2 个答案:

答案 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();