繁体   English   中英

在ASP.NET MVC4控制器中解析json

[英]Parsing json in ASP.NET MVC4 controller

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;
        }

使用NewtonSoft JSON Deserialize,如下所示:

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

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

请享用。

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

最好的办法是使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;}并不是最好的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM