0

我有一个要发送到 ac# 服务器的 JSON 字符串。它包括一个事件对象数组和一个关系对象数组。关系对象描述数据库表关系。

但是,我无法从服务器上的 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"
                        ]
                    }
                ]
            }
        ]
    }
}
4

2 回答 2

3

Request.Form.ToString()会返回类似“a=1&b=3”的结果,这绝对不是你需要的。

如果您在提交表单时传递值,则可以使用Request.Form["your-key"]来获取值。

如果您通过 http 正文传递值,则可以使用new StreamReader(Request.InputStream).ReadToEnd()来获取整个 JSON 字符串。

于 2012-05-31T09:40:52.827 回答
2

我认为您的获取过程中有错误...

它不是

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();

重要 - 真正使用/ /...-element的name-attributeinputselect

不管怎样:我想鼓励你,使用例如。<asp:HiddenField runat="server" ID="foo" />. 当您拥有服务器控件时,您可以通过this.foo.Value在服务器端进行简单操作来访问其值,而在客户端,您可以访问输入字段,例如document.getElementById('<%= this.foo.ClientID %>')

于 2012-05-31T09:28:08.770 回答