将JSON绑定到模型C#
我对我的Web API有一个HttpPost请求,并将数据保存到我的数据库中。问题在于JSON数据不是静态格式,如下所示:将JSON绑定到模型C#,c#,asp.net-mvc,json,model-binding,C#,Asp.net Mvc,Json,Model Binding,我对我的Web API有一个HttpPost请求,并将数据保存到我的数据库中。问题在于JSON数据不是静态格式,如下所示: { "35":{ "FormId":"4", "DateSubmitted":"2014-04-03 10:45:05", "UserIp":"127.0.0.1", "Username":"", "UserId":"0", "Lang":"en-GB", "confirmed":"Yes" }, "36":{ "FormId":"4", "DateSubmitted":"
{
"35":{
"FormId":"4",
"DateSubmitted":"2014-04-03 10:45:05",
"UserIp":"127.0.0.1",
"Username":"",
"UserId":"0",
"Lang":"en-GB",
"confirmed":"Yes"
},
"36":{
"FormId":"4",
"DateSubmitted":"2014-04-04 02:18:52",
"UserIp":"127.0.0.1",
"Username":"",
"UserId":"0",
"Lang":"en-GB",
"confirmed":"Yes"
}
}
这里的35和36可以是任何数字,我不知道如何将其绑定到模型。
任何人都可以给我指路?
提前感谢下面是一个快速示例,说明如何使用JSON.Net和dynamic关键字实现我认为您要实现的目标。为了简单起见,我去掉了一些属性:
[HttpPost]
public void POST(string text)
{
dynamic result = JsonConvert.DeserializeObject(text);
foreach (var res in result)
{
var ele = new Test();
ele.ArrayId = int.Parse(res.Name);
dynamic value = res.Value;
ele.FormId = int.Parse(value.FormId.Value);
ele.Ip = value.UserIp.Value;
//etc.
}
}
以及与之配套的模型类:
public class Test
{
public int ArrayId { get; set; }
public int FormId { get; set; }
public string Ip { get; set; }
}
你能控制JSON的格式吗?看起来你更倾向于一个对象数组而不是单独的命名对象,对吗?是的,它是一个解析为JSON的对象数组。我对此没有控制权。该请求是从另一个网站中的ajax请求发布的。你可以拥有一个包含数组索引和类对象。然后你循环这个包装器模型来保存实际数据,如FormId等。如果我没有错的话,默认情况下使用JSON.NET的Web API。那么我如何获得“var text”API操作的值?抱歉,我对Web API完全陌生:DNo问题。我认为您可以将POST控制器的参数类型更改为字符串,然后获得原始JSON值。我将尝试编辑我的答案以包含详细信息。感谢它的工作。我获得JSON原始值并使用JSON.NET对其进行反序列化,然后绑定到我的型号:D。