2017-05-10 90 views
1

嗨有效的JSON我从Request.InputStream格式值在Asp.net MVC

searchbtn=&__RequestVerificationToken=Cj00sURmj5hhazrlcx72-ahnRwOFhZzMOO5hdMH8epMUFTkicNYlKy9Fs3nZdq_Whzr3I57zZqsncWybsNrQ47Sg4vGQB6GbqRPrL3D0o3Q1 
&ClientID=274&CompanyName=&PerformedDate=&X-Requested-With=XMLHt 
tpRequest 

波纹管串有什么绝招来格式化这个字符串为有效的JSON字符串?

+0

你怎么把它传回控制器?它是通过AJAX吗? –

回答

1

您可以做的最好的事情就是让模型绑定器通过让您的操作接受数据作为类实例来处理它。例如:

public class MyViewModel 
{ 
    public int ClientID { get; set; } 
    public string CompanyName { get; set; } 
    public DateTime? PerformedDate { get; set; } 
} 

然后:

public ActionResult Foo(MyViewModel model) 

有没有真正任何理由,你应该有直接访问请求InputStream。如果再需要,作为JSON出于某种原因,你可以简单地这样做:

var json = Json.Encode(model); 

短,你只需要手动解析它并创建一个对象出来。例如:Json.Encode(data)

var data = inputString 
    .Split(new[] { '&' }, StringSplitOptions.RemoveEmptyEntries) 
    .Select(s => s.Split(new[] { '=' })) 
    .ToDictionary(d => d[0], d => d[1]); 

您可以然后通过把它变成JSON。

+0

我曾尝试第二个选项,但得到**本地或参数名为“d”不能声明** 字符串QS =“searchbtn = __ RequestVerificationToken = Cj00sURmj5hhazrlcx72-ahnRwOFhZzMOO5hdMH8epMUFTkicNYlKy9Fs3nZdq_Whzr3I57zZqsncWybsNrQ47Sg4vGQB6GbqRPrL3D0o3Q1”的错误; qs + =“&ClientID = 274&CompanyName =&PerformedDate =&X - 请求 - With = XMLHttpRequest”; var data = qs.Split(new [] {'&'},StringSplitOptions.None).Select(s => qs.Split(new [] {'='}))。ToDictionary(d => d [0],d => d [1]); –

+0

问题是'select(s => qs',应该是'Select(s => s'。 –

+0

使用相同的问题 var data = qs .Split(new [] {'&'},StringSplitOptions (d => d [0],d => d [1]); –

0

克里斯·普拉特有最好的答案,但如果你坚持做你的要求,你可以做这样的:

var nameValueCollection = 
System.Web.HttpUtility.ParseQueryString(Request.InputStream); 
var dictionary = nameValueCollection.AllKeys.ToDictionary(k => k, k => 
nameValueCollection[k]); 
string json = Newtonsoft.Json.JsonConvert.SerializeObject(dictionary); 

它要求的是你没有在请求字符串重复键。