【发布时间】:2012-02-07 15:23:18
【问题描述】:
这不是最清晰的问题标题,对此感到抱歉,但我会尽我所能解决我的问题。
我有一些客户端 javascript,并且正在尝试进行 ajax 服务器端调用,传递一些数据。我正在使用 JSON 序列化这些数据。
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
data: stringifyData(dataToStringify)
dataType: "json",
});
stringifyData = function (dataToStringify){
var requestParameters = {};
requestParameters.requestData = dataToStringify;
return JSON.stringify(requestParameters)
}
这是我正在使用的代码,效果很好。
//client side JS
var dataToStringify = 'John'
//Becomes- '{"requestData":"John Smith"}'
//server side c#
[WebInvoke(Method = "POST")]
public string ajaxCall(string requestData){
//stuff
}
如果我序列化一个简单的字符串,它会反序列化为一个字符串。
//client side JS
var dataToStringify = {}
dataToStringify.FirstName = 'John'
dataToStringify.SurName = 'Smith'
//Becomes- '{"requestData":{"Firstname":"John","Surname":"Smith"}}'
//server side c#
public class Person {
string Firstname {get;set;}
string Surname {get;set;}
}
[WebInvoke(Method = "POST")]
public string ajaxCall(Person requestData){
//stuff
}
如果我序列化一个 javascript 对象,那么它会反序列化为适当的服务器端对象(已定义所有键)。
//client side JS
var dataToStringify = {}
dataToStringify.Key1 = 'Val1'
dataToStringify.Key2 = 'Val2'
...
dataToStringify.Keyn = 'Valn'
//Becomes- '{"requestData":{"Key1":"Val1","Key2":"Val2"...,,"Keyn":"Valn"}}'
//server side c#
[WebInvoke(Method = "POST")]
public string ajaxCall(??? requestData){
//stuff
}
我的问题是我试图传递一个对象,其中键并不都是已知的——一个简单的键/值对列表。但我无法让它正确反序列化。使用“字典”作为服务器端类型不起作用,通用“对象”也不起作用。
在我的最后一个例子中,reqestData 对象应该是什么类型?我正在努力实现的目标可能吗?
非常感谢。
【问题讨论】:
-
JavaScriptSerializer将您的数据完全反序列化为Dictionary<string,string>。但我不知道如何强制您的服务器端代码使用它而不是DataContractJsonSerializer
标签: c# javascript ajax json serialization