我正在尝试在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;
}
}
}
答案 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
。