Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在ASP.NET MVC4控制器中解析json_C#_Asp.net_Asp.net Mvc_Json_Asp.net Mvc 4 - Fatal编程技术网

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

C# 在ASP.NET MVC4控制器中解析json,c#,asp.net,asp.net-mvc,json,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Json,Asp.net Mvc 4,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":"km

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

您需要使用正确的内容类型发布数据。在本例中,它是application/json。MVC根据用于向服务器发送数据的内容类型选择正确的绑定模式。

您需要使用正确的内容类型发布数据。在本例中,它是application/json。MVC根据用于向服务器发送数据的内容类型选择正确的绑定模式。

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

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

School datum = JsonConvert.Deserialize<School>(jsonStr);
//Do stuff with datum...
班级学校
{
公共弦乐学生;
公共对象[]数据;
}
学校数据=JsonConvert.Deserialize(jsonStr);
//用数据做东西。。。

享受

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

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

School datum = JsonConvert.Deserialize<School>(jsonStr);
//Do stuff with datum...
班级学校
{
公共弦乐学生;
公共对象[]数据;
}
学校数据=JsonConvert.Deserialize(jsonStr);
//用数据做东西。。。

享受

最好的方法是将json的名称与接受变量“mysale”的名称相同。 例如:

您可以通过以下方式在AJAX调用中添加名称来实现:

$.ajax({
   ...,
   ...,
   data: JSON.stringify({mysale:data}),
   ...,
   ...
});
现在它将接受您的JSON

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


因此,要回答您的问题:添加{get;set;}不是最好的方法。

最好的方法是让json与接受变量“mysale”具有相同的名称。 例如:

您可以通过以下方式在AJAX调用中添加名称来实现:

$.ajax({
   ...,
   ...,
   data: JSON.stringify({mysale:data}),
   ...,
   ...
});
现在它将接受您的JSON

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


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

如何将JSON发布到MVC?(代码才是真正重要的)。e、 g.AJAX=>您发送的数据是什么?http POST请求正文包含有问题的文本json。我将
{get;set;}
添加到每个有问题的类中的每个属性中,看起来属性中都填充了数据。这是最好的解决方案吗?如何将JSON发布到MVC?(代码才是真正重要的)。e、 g.AJAX=>您发送的数据是什么?http POST请求正文包含有问题的文本json。我将
{get;set;}
添加到每个有问题的类中的每个属性中,看起来属性中都填充了数据。这是最好的解决方案吗?post中的Http头包含
内容类型:application/json;charset=UTF-8
,因此看起来它是正确的。我在每个属性中添加了
{get;set;}
,现在看来json解析正确了。这是最好的解决方案吗?抱歉,我没有注意到您正在使用字段。MVC model binder在进行绑定时只查找可设置的字段。如果您想使用NewtonSoft的序列化程序,可以替换MVC的默认JSON序列化程序。我尝试使用它,但日期仍然以Microsoft格式返回。我在post contains
Content-Type:application/json的Http头中发布了它;charset=UTF-8
,因此看起来它是正确的。我在每个属性中添加了
{get;set;}
,现在看来json解析正确了。这是最好的解决方案吗?抱歉,我没有注意到您正在使用字段。MVC model binder在进行绑定时只查找可设置的字段。如果您想使用NewtonSoft的序列化程序,可以替换MVC的默认JSON序列化程序。我尝试使用它,但日期仍然以Microsoft格式返回。我在中发布了它,我将{get;set;}添加到每个属性中,现在看来json解析正确了。这是最好的解决方案吗?据我所知,NewtonSoft是最快的方法。我在每个属性中添加了{get;set;},现在看来json解析正确了。这是最好的解决方案吗?据我所知,NewtonSoft是最快的方法。