在C#中将查询字符串序列化为Json - 值不会显示,只显示键。为什么?

时间:2011-09-19 13:58:20

标签: c# json.net request.querystring

我正在尝试在C#中将查询字符串序列化为JSON。我没有得到我期望的结果,我希望有人可以解释。有些原因我只得到查询“名字”而不是“价值”。

   //Sample Query:
   http://www.mydomain.com/Handler.ashx?method=preview&appid=1234      


    //Generic handler code:
    public void ProcessRequest(HttpContext context)
    {
        string json = JsonConvert.SerializeObject(context.Request.QueryString);
        context.Response.ContentType = "text/plain";
        context.Response.Write(json);
    }

    //Returns something like this:
    ["method", "appid"]

    //I would expect to get something like this:
    ["method":"preview", "appid":"1234"]

任何人都知道如何获得类似后一个样本输出的字符串?我也试过了

string json = new JavaScriptSerializer().Serialize(context.Request.QueryString);

并得到与Newtonsoft Json相同的结果。

编辑 - 这是基于以下答案的最终工作代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Script.Serialization;
using Newtonsoft.Json;
using System.Collections.Specialized;

namespace MotoAPI3
{

public class Json : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        var dict = new Dictionary<string, string>();
        foreach (string key in context.Request.QueryString.Keys)
        {
            dict.Add(key, context.Request.QueryString[key]);
        }

        string json = new JavaScriptSerializer().Serialize(dict);
        context.Response.ContentType = "text/plain";
        context.Response.Write(json);
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

2 个答案:

答案 0 :(得分:4)

好吧,查询字符串是NameValueCollection,如何序列化NameValueCollection在这里:how to convert NameValueCollection to JSON string?

答案 1 :(得分:4)

这评估为Dictionary<string,string>,可以通过JavaScriptSerializer或Newtonsoft的Json.Net轻松序列化:

Request.QueryString.AllKeys.ToDictionary(k => k, k => Request.QueryString[k])

Request.QueryString中的任何重复键最终都是字典中的单个键,其值以逗号分隔在一起。

当然,这也适用于任何NameValueCollection,而不仅仅是Request.QueryString