1

json 使用 POST 方法从浏览器传递到服务器中的 ASP.NET MVC4 应用程序控制器。它包含属性,其中 3 个是 0.. 20 个元素的数组(在下面的代码中,它们都只有 1 个元素)。如何在 C# 中解析这个 json?我尝试了带有签名的控制器

public JsonResult RegisterSales(Sale mysale)

但未分配 mysale 属性。

通过json:

{ "id":"sale1",
  "sale_date":"2013-11-10 19:20:44"
  "taxes":[{"id":"km20pr","name":"20%","rate":0.2}],
  "products":[{"id":"prod1",
            "sale_id":"sale1",
            "register_id":"register1",
            "quantity":"1.00000"}],

  "payments":[{"id":"payment1",
            "sale_id":"sale1",
            "register_id":"register1",
           "amount": 0
      }]
 }

它应该解析为 C# 结构,例如

public class Sale
        {
            public string id;
            public DateTime sale_date;
            public Tax[] taxes;
            public Product[] products;
            public Payment[] payments;
        }

public class Tax
        {
            public string id, name;
            public decimal rate;
        }

public class Product
        {
            public string id, sale_id, register_id;
            public decimal quantity;
        }


public class Payment
        {
            public string id, sale_id, register_id;
            public decimal amount;
        }
4

3 回答 3

1

使用 NewtonSoft JSON 反序列化,如下所示:

class School
{
    public string student;
    public object[] data;
}

School datum = JsonConvert.Deserialize<School>(jsonStr);
//Do stuff with datum...

享受。

于 2013-11-10T21:45:18.793 回答
0

您需要发布具有正确内容类型的数据。在这种情况下,它是应用程序/json。MVC 根据用于向服务器发送数据的内容类型选择正确的绑定模式。

于 2013-11-10T21:45:11.970 回答
0

最好的办法是为 json 设置与接受变量“mysale”相同的名称。例子:

"mysale": { "id":"sale1",
  "sale_date":"2013-11-10 19:20:44"
  "taxes":[{"id":"km20pr","name":"20%","rate":0.2}],
  "products":[{"id":"prod1",
            "sale_id":"sale1",
            "register_id":"register1",
            "quantity":"1.00000"}],

  "payments":[{"id":"payment1",
            "sale_id":"sale1",
            "register_id":"register1",
           "amount": 0
      }]
 }

您可以通过在 AJAX 调用中添加名称来做到这一点:

$.ajax({
   ...,
   ...,
   data: JSON.stringify({mysale:data}),
   ...,
   ...
});

现在它将接受您的 JSON。

这样做的原因是,发布的 JSON 将被视为一个帖子值,就像使用普通表单一样,您可以通过它的名称来捕获这个值。

所以回答你的问题:添加 {get;set;} 不是最好的方法。

于 2013-11-10T21:59:02.593 回答