【问题标题】:How to deserialize json array data in ASP.NET MVC controller如何在 ASP.NET MVC 控制器中反序列化 json 数组数据
【发布时间】:2018-10-31 20:21:14
【问题描述】:

我已经成功反序列化了一个简单的 json 对象,但是当我使用 POST 请求向我的控制器发送一个 json 对象数组时,它失败了。这是我的代码:

[HttpPost]
public string addWwarehouse([FromBody] warehouse warehouses)
{
      System.Diagnostics.Debug.WriteLine(warehouses[0].name);
      return "success";
}

这是工作 json 数据:

{
    "warehouses":
    {
        "name":"WarehouseA",
        "location":"locationA"
    }
}

但是当我使用这样的数组时,

[{
    "warehouses":
    {
        "name":"WarehouseA",
        "location":"locationA"
    }
}]

它不起作用。我也尝试使用List<warehouse>,但仍然没有运气。这是我的warehouse 班级:

public class warehouse { 
    public string name  { get; set; }
    public string location { get; set; }
}

【问题讨论】:

  • 你调查了什么?例如,请参阅this SO 问题。
  • 感谢您的帮助,但在这个问题中,请求没有转换为 json 对象,但在我的情况下,它就像我已经使用过的 JSON.stringify

标签: c# json asp.net-mvc


【解决方案1】:

欢迎来到 StackOverflow。

不是因为你的模型不是List<warehouse>

[{
    "warehouses":
    {
        "name":"WarehouseA",
        "location":"locationA"
    }
}]

它是一个对象数组每个,具有一个名为“仓库”的属性,其中包含一个类型为warehouse 的单一对象。您可能希望发送一系列仓库:

[{
    "name":"WarehouseA",
    "location":"locationA"
}, {
    "name":"WarehouseB",
    "location":"locationB"
}]

并将其反序列化为List<warehouse>

附: 如果您无法控制 json 格式,那么@Tiago Ávila 的答案应该可以解决问题。

让我们检查模型:

[{                                // [...] - array of some outer objs
    "warehouses":                 // with single property
    {                
        "name":"WarehouseA",      // inner obj that resides inside outer obj
        "location":"locationA"
    }
}]

【讨论】:

  • 先生,我已经尝试过这种方法,但问题是我的 json 请求是像上面提到的那样以[] 括号开头的数组创建的,所以有什么方法可以反序列化它吗?
【解决方案2】:

因为你的 json 是这样的,你需要一个这样的类:

public class Warehouses
{
    public string name { get; set; }
    public string location { get; set; }
}

public class RootObject
{
    public Warehouses warehouses { get; set; }
}

那么,你的动作应该是这样的:

public string addWwarehouse([FromBody] RootObject warehouses)

我认为这会解决。

【讨论】:

  • 在您的操作中尝试 RootObject 列表: public string addWwarehouse([FromBody] List warehouses)
  • 是的先生,它正在工作,但你能解释一下我们的 json 数据中没有像 RootObject 这样的东西吗?
  • RootObject 只是类的名称,您可以更改任何对您更有意义的内容。我所做的是,我使用您的 json 并使用该站点转换为 ac# 类:json2csharp.com 之后我意识到您的 json 在 [] 括号内,这意味着您需要在您的操作中列出您的类.
猜你喜欢
  • 1970-01-01
  • 2011-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多