C# 在ASP.NET MVC4控制器中解析json
json使用POST方法从浏览器传递到服务器中的ASP.NET MVC4应用程序控制器。 它包含属性,其中3是0的数组。。20个元素(所有元素下面的代码) 只有1个元素)。 如何在C#中解析此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
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 containsContent-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是最快的方法。