【问题标题】:How do I get a JavaScript array of an array of strings into a C# data structure?如何将字符串数组的 JavaScript 数组放入 C# 数据结构中?
【发布时间】:2015-05-18 22:33:45
【问题描述】:

过去一个小时我一直在尝试,但无法获得它。此时我的控制器看起来像

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 (内部服务器错误)

有时在我的浏览器控制台中,有时在我的浏览器控制台中

附加信息:类型 'AllyPortal.Controllers.SurfaceAssetsController+ThreePartKey' 不是 支持数组的反序列化。

作为 Visual Studio 错误。

我已经试验了一百万件事情,但无法做到这一点。我想要的只是在一些 C# 数据结构中拥有 JSON,我可以在我的控制器中实际使用它。有什么建议吗?

【问题讨论】:

  • 您是否尝试将其反序列化为 IEnumerable 而不是数组?
  • @BradleyDotNET 假设我可以做到这一点,那么我该如何获取 JavaScript 数组中每个子数组的组成字符串?
  • 啊,您的 JS 数据模型与 C# 不匹配,这也可能有问题。首先尝试让每个对象只保存一个字符串数组(因为这就是它所得到的)。您可以尝试仅访问它,但是 10:1 它不会理解如何将子数组中的非命名字符串映射到您定义的属性。

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


【解决方案1】:

您正在尝试反序列化为不兼容的模型。您可以将字符串输入反序列化为 string[][] 变量,但为了允许反序列化为 ThreePartKey,您需要为每个属性命名这些值: [[组织名称:“微软”,...]] 这会将正确的值复制到您的模型中

【讨论】:

    【解决方案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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-25
      • 2012-09-11
      • 1970-01-01
      • 1970-01-01
      • 2021-05-21
      • 2010-10-15
      • 2020-03-29
      • 1970-01-01
      相关资源
      最近更新 更多