我有一个 JSON 字符串,我要发送到 c# 服务器。 它包括事件对象的数组和关系对象的数组。 关系对象描述数据库表关系。
但是,我无法从服务器上的 JSON 获取数据。 服务器上不存在要脱轨的对象,当我尝试以下操作时 JSON.net 会抛出解析错误:
// Both throw parse errors
JObject o = JObject.Parse(Request.Form.ToString());
JsonConvert.DeserializeObject<MobileEvents>(Request.Form.ToString());
该 JSON:
{
"CreateEvents": {
"Event": [
{
"Id": "1",
"Subject": "Hire a Clown"
}
],
"Relationship": [
{
"Primary": "Table1",
"Secondary": "Table2",
"Field": [
{
"Table1Id": "1",
"Table2Id": [
"101"
]
}
]
},
{
"Primary": "Table1",
"Secondary": "Table3",
"Field": [
{
"Table1Id": "1",
"Table3Id": [
"200025"
]
}
]
},
{
"Primary": "Table1",
"Secondary": "Table4",
"Field": [
{
"Table1Id": "1",
"Table4Id": [
"3"
]
}
]
}
]
}
}
Request.Form.ToString()
会返回"a=1&b=3"这样的结果,这绝对不是你需要的。
如果要在提交表单时传递值,则可以使用 Request.Form["your-key"]
来获取值。
如果要通过 http 正文传递值,则可以使用 new StreamReader(Request.InputStream).ReadToEnd()
获取整个 JSON 字符串。
我认为您在获取过程中有一个错误...
这不是
this.Request.Form.ToString(); // see http://stackoverflow.com/questions/7065979/why-is-the-return-value-of-request-form-tostring-different-from-the-result-of for output
相反,它应该是
this.Request.Form["myInputNAME"].ToString();
重要 - 真正使用input
/select
/...-元素的name
属性
无论如何:我想鼓励你,使用例如。 <asp:HiddenField runat="server" ID="foo" />
.当您有一个服务器控件时,您可以通过在服务器端执行简单的this.foo.Value
来访问其值,而在客户端,您可以访问输入字段,如document.getElementById('<%= this.foo.ClientID %>')