【问题标题】:{"No parameterless constructor defined for type of 'System.String[]'."} while deserailsing json data{“没有为 'System.String[]' 类型定义无参数构造函数。”} 同时对 json 数据进行脱轨
【发布时间】:2014-05-17 11:53:36
【问题描述】:

这是我的控制器

[NoCache]
    public ActionResult SaveAssociate(string data)
    {
        JavaScriptSerializer json = new JavaScriptSerializer();
        List<string> mystring = json.Deserialize<List<string>>(data);
        return Content("Hai");
    }

表达数据 价值:

[{"AssetName":"8888","AssetNumber":"8888","Classification":null,"ParentAsset":null,"SerialNumber":"8888","ParentCompany":"JPL Holdings","Barcode":null,"RFIDTags":null,"AssetId":"dfe2ae51-f153-4a67-bd3b-0114d8a40751","Notes":null,"Manufacturer":null,"DepartmentId":null,"Department":null,"SupplierId":null,"Supplier":null},{"AssetName":"552014","AssetNumber":"552014","Classification":null,"ParentAsset":"8888","SerialNumber":"552014","ParentCompany":"JPL Holdings","Barcode":null,"RFIDTags":null,"AssetId":"4109ba40-af78-486a-a40e-1d14a2d7b42f","Notes":null,"Manufacturer":null,"DepartmentId":null,"Department":null,"SupplierId":null,"Supplier":null},{"AssetName":"201","AssetNumber":"201","Classification":null,"ParentAsset":null,"SerialNumber":"2011","ParentCompany":"JPL Holdings","Barcode":null,"RFIDTags":null,"AssetId":"3e552280-16df-4c17-a4a5-1f61c4c96835","Notes":null,"Manufacturer":null,"DepartmentId":null,"Department":null,"SupplierId":null,"Supplier":null}]

在这一行List&lt;string&gt; mystring = json.Deserialize&lt;List&lt;string&gt;&gt;(data); 我得到了

{"No parameterless constructor defined for type of 'System.String[]'."}

我也试过这样

 [Serializable]
public class GetUser
{
    public GetUserdata[] Data { get; set; }
}

[Serializable]
public class GetUserdata
{
    public string AssetName { get; set; }
    public string AssetNumber { get; set; }
    public string Classification { get; set; }
    public string ParentAsset { get; set; }
    public string SerialNumber { get; set; }
    public string ParentCompany { get; set; }
    public string Barcode { get; set; }
    public string RFIDTags { get; set; }
    public string AssetId { get; set; }
    public string Notes { get; set; }
    public string Manufacturer { get; set; }
    public string DepartmentId { get; set; }
    public string Department { get; set; }
    public string SupplierId { get; set; }
    public string Supplier { get; set; }
}

控制器

 public ActionResult SaveAssociate(string data)
    {
        JavaScriptSerializer json = new JavaScriptSerializer();
        GetUser mystring = json.Deserialize<GetUser>(data);
        return Content("Hai");
    }

出现错误 数组的反序列化不支持类型“AssetTrackingSystem.Model.GetUser”。

帮帮我

【问题讨论】:

  • 我不知道 ASP.net,所以我不会发布任何答案。我确实质疑你为什么说 List 应该是字符串,而它应该是一个反序列化的返回(我假设它是一个对象或数组或其他东西)
  • 请检查我上面的编辑
  • 我已经阅读了编辑,我的问题仍然存在(需要注意的是,我对我正在查看的内容并不十分了解)。 Deserialize 不应返回字符串,但您的类型转换和 var 名称暗示您希望它返回。文档 (msdn.microsoft.com/en-us/library/bb355316(v=vs.110).aspx) 说它返回“反序列化对象”。
  • forums.asp.net/t/1713640.aspxstackoverflow.com/questions/15699395/… 这个网站显示它有效..我关注了这个
  • 我不知道——我希望我的观察对你有所帮助,但我不知道它的准确度。

标签: json asp.net-mvc-4 deserialization


【解决方案1】:

上面的代码,你能不能试试:

 public ActionResult SaveAssociate(string data)
 {
    JavaScriptSerializer json = new JavaScriptSerializer();
    GetUserdata[] myUsers = json.Deserialize<GetUserdata[]>(data);
    return Content("Hai");
  }

因为您的 Json 是作为对象数组而不是数组对象发送的。 希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2020-08-31
    • 2012-03-12
    • 1970-01-01
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多