none
怎样才能正确读取Request中的json格式的字符串呢? RRS feed

  • 问题

  • 我在客户端使用json向服务器发送了数据,json数据如下:
    {"make":"Dodge","model":"Coronet R/T","year":1968,"color":"yellow"}
    在服务端我使用json.net解析该数据,JavaScriptConvert.DeserializeObject()需要知道json的字符串,我不知道怎样读取Request里的这个字符串,我使用StreamReader读取的内容都是数字,代码如下:
            private string GetJsonStringFromRequest()
            {
                Stream stream = Request.InputStream;

                StreamReader reader = new StreamReader(stream);

                StringBuilder str = new StringBuilder();
                while (reader.Peek() >= 0)
                {
                    str.Append(reader.Read());
                }

                return str.ToString();

                //int streamLength = Convert.ToInt32(stream.Length);
                //byte[] strArray = new byte[streamLength];
                //int streamRead = stream.Read(strArray, 0, streamLength);

                //StringBuilder retStr = new StringBuilder();
                //for (int i = 0; i < streamLength; i++)
                //{
                //    retStr.Append(strArray[i].ToString());
                //}

                //return retStr.ToString();
            }

    请问怎样才能正确读取Request中的json格式的字符串呢?


    做最好的自己
    2009年7月23日 1:44

答案

  • 楼主,你好

    的确在使用xmlhttprequest发送数据的时候必须是这样的形式:xmlHttpObject.send("JSON=" + jsonStr.toString()).
    然后通过Request.Form["JSON"]的方式获得。


    Microsoft Online Community Support
    2009年7月24日 4:40
  • private string GetJsonStringFromRequest()
    {
        Byte[] fByteArray = new Byte[Request.InputStream.Length];
        Request.InputStream.Read(fByteArray, 0, fByteArray.Length);
        return System.Text.Encoding.Default.GetString(fByteArray);
    }

    知识改变命运,奋斗成就人生!
    2009年7月24日 4:41
    版主
  • 用正则表达式!
    http://hi.baidu.com/2009ajun
    2009年7月24日 5:57
  • 您的意思是不是我必须将json数据以名值对的形式发送,也就是我还得加个名称
    比如:
    jsonData=“{"make":"Dodge","model":"Coronet R/T","year":1968,"color":"yellow"}”
    这样,再通过Request.Form["jsonData"]才能获取json数据?
    就不能不使用名值对的方法吗?
    做最好的自己
    json传输就是字符串,和一般的表单元素相同
    【孟子E章】
    2009年7月24日 7:41
    版主

全部回复

  • 你好对于Request 如果是通过url传递的 比如http://www.abc.com?key=33333 就通过Request.QueryString["key"]读取
    对于input或者textarea传递的通过Request.Form["元素的名称"]来获取

    无论是那种方式 都是通过key1=value1&key2=value2.....的模式发送到服务器端 你可以通过Request["key name"]来获取


    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    2009年7月23日 1:53
    版主
  • 你好,我没有使用那种方法,我是通过XMLHttpRequest的send()方法发送的。请问怎样获取该数据。
    做最好的自己
    2009年7月23日 7:49
  • 你好,我没有使用那种方法,我是通过XMLHttpRequest的send()方法发送的。请问怎样获取该数据。
    做最好的自己

    您好,发送时要指定url,就可以考虑用1楼的方法了。
    2009年7月23日 10:14
    版主
  • 如果是POST方式。Request.Form["xx"]就可以了
    【孟子E章】
    2009年7月23日 13:33
    版主
  • 您的意思是不是我必须将json数据以名值对的形式发送,也就是我还得加个名称
    比如:
    jsonData=“{"make":"Dodge","model":"Coronet R/T","year":1968,"color":"yellow"}”
    这样,再通过Request.Form["jsonData"]才能获取json数据?
    就不能不使用名值对的方法吗?
    做最好的自己
    2009年7月23日 23:15
  • 楼主,你好

    的确在使用xmlhttprequest发送数据的时候必须是这样的形式:xmlHttpObject.send("JSON=" + jsonStr.toString()).
    然后通过Request.Form["JSON"]的方式获得。


    Microsoft Online Community Support
    2009年7月24日 4:40
  • private string GetJsonStringFromRequest()
    {
        Byte[] fByteArray = new Byte[Request.InputStream.Length];
        Request.InputStream.Read(fByteArray, 0, fByteArray.Length);
        return System.Text.Encoding.Default.GetString(fByteArray);
    }

    知识改变命运,奋斗成就人生!
    2009年7月24日 4:41
    版主
  • 用正则表达式!
    http://hi.baidu.com/2009ajun
    2009年7月24日 5:57
  • 您的意思是不是我必须将json数据以名值对的形式发送,也就是我还得加个名称
    比如:
    jsonData=“{"make":"Dodge","model":"Coronet R/T","year":1968,"color":"yellow"}”
    这样,再通过Request.Form["jsonData"]才能获取json数据?
    就不能不使用名值对的方法吗?
    做最好的自己
    json传输就是字符串,和一般的表单元素相同
    【孟子E章】
    2009年7月24日 7:41
    版主
  • 您的方法是对的,我按照您的方法,正确接收到了数据。可见,不一定必须要用名值对的形式。
    因为,send()方法发送的数据包含在请求的主体中,而Request.InputStream获得的是HTTP实体主体的内容。两者正好对应。
    做最好的自己
    2009年7月24日 13:01