C#如何接收来自请求体中的JSON数据?

4

我有这个HttpPost方法:

[HttpPost]    
public string Test([FromBody]List<Account> accounts)
{
   var json = JsonConvert.SerializeObject(accounts);
   Console.Write("success");
   return json;
}

这是我的账户类:

public class Account
{
    public int accountId;
    public string accountName;
    public string createdOn;
    public string registrationNumber;
}

这是我在Postman中发送的JSON文件:
{
    "Account": [
    {
        "accountId": "1",
        "accountName": "A purple door",
        "createdOn": "25-07-2017",
        "registrationNumber": "purple"
    },
    {
        "accountId": "2",
        "accountName": "A red door",
        "createdOn": "26-07-2017",
        "registrationNumber": "red"
    },
    {
        "accountId": "3",
        "accountName": "A green door",
        "createdOn": "27-07-2017",
        "registrationNumber": "green"
    },
    {
        "accountId": "4",
        "accountName": "A yellow door",
        "createdOn": "25-07-2017",
        "registrationNumber": "yellow"
    }
    ]
}

如果我发送这个JSON,我的方法就无法工作,并且会返回一个空对象。 唯一使其工作的方法是仅发送对象而不包括“账户”,如下所示:

[
    {
      "accountId": "1",
      "accountName": "A purple door",
      "createdOn": "25-07-2017",
      "registrationNumber": "purple"
    },
    {
      "accountId": "2",
      "accountName": "A red door",
      "createdOn": "26-07-2017",
      "registrationNumber": "red"
    },
    {
      "accountId": "3",
      "accountName": "A green door",
      "createdOn": "27-07-2017",
      "registrationNumber": "green"
    },
    {
      "accountId": "4",
      "accountName": "A yellow door",
      "createdOn": "25-07-2017",
      "registrationNumber": "yellow"
    }
]

但我想要以前的文件格式。 我的方法如何接收以前的JSON?


在新类中创建一个复杂类型属性,其类型为Account。 - Power Star
您尝试反序列化的参数类型与存储在JSON中的结构不符。您可以使用类似http://json2csharp.com/的工具来检查正确的C#类型应该是什么样子的。 - kiziu
我已经尝试创建另一个类,其中包含我的Account类的列表,但是虽然它返回了正确数量的账户,但每个账户的成员都为空。 - kostasandre
尝试添加属性 {get;set;} - Power Star
2个回答

3

试着使用这份合约来实现你的需求。

public class Rootobject
{
    public Account[] Account { get; set; }
}

public class Account
{
    public string accountId { get; set; }
    public string accountName { get; set; }
    public string createdOn { get; set; }
    public string registrationNumber { get; set; }
}

方法应该像这样。

[HttpPost]    
public string Test([FromBody]Rootobject accounts)
{
   var json = JsonConvert.SerializeObject(accounts);
   Console.Write("success");
   return json;
}

1
谢谢,它起作用了...!! 我的问题是我在Rootobject中制作帐户列表而不是数组。谢谢 - kostasandre

1
为您的 Account 类添加一个包装器,并更改方法定义。
public class Account
        {
            public int accountId;
            public string accountName;
            public string createdOn;
            public string registrationNumber;
        }
        public class AccountWrapper
        {
            public List<Account> Accounts { get; set; }
        }
public string Test([FromBody]AccountWrapper accounts)
    {

    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接