2
我有一個似乎很容易的問題,但事實證明這是一個非常困難的問題。轉換爲JSON時忽略空屬性
我寫了這樣的事情
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
[System.Web.Script.Services.ScriptService]
public class UIService : System.Web.Services.WebService
{
public UIService() {
//Uncomment the following line if using designed components
//InitializeComponent();
}
[WebMethod(EnableSession=true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
[System.Security.Permissions.PrincipalPermission(System.Security.Permissions.SecurityAction.Demand, Authenticated = true)]
public Accordion ConstructAccordian(string accordionId)
{
Accordion result = new Accordion();
result.Name = "MenuAccordion";
AccordionItem item1 = new AccordionItem("Test");
item1.Items.Add(new MenuItem("User", "UserList"));
item1.Items.Add(new MenuItem("OnlineUser", "OnlineUser"));
result.Items.Add(item1);
return result;
}
function get(url, pdata, func) {
var msg = "Exception";
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: url,
data: JSON.stringify(pdata),
dataType: "json",
async: true,
success: function (data, textStatus) {
if (textStatus == "success") {
if (data.hasOwnProperty('d')) {
msg = data.d;
} else {
msg = data;
}
func(msg);
}
},
error: function (data, textStatus) {
get(MEMBERSHIP_SERVICE_AUTHCHCK_URL, {}, function (msg) {
if (msg.error == true) {
window.location = PORTAL_LOGIN_URL;
}
else {
get(url, pdata, func);
}
});
}
});
}
它工作正常。但是,當一個手風琴的財產在零。該屬性顯示爲JSON字符串,其值爲空。我想要JavaScriptSerializer(由System.Web.Script.Services.ScriptService使用)忽略空屬性,因此不會在json字符串中生成它們。我搜索了很多,我認爲JavaScriptSerializer不能做到這一點。有沒有簡單的方法來改變JavaScriptSerializer,例如使用JSON.net作爲ScriptService的默認formmater,或者如何在序列化爲JSON時忽略生成null屬性。從http://json.org/
從來沒有使用過它,但你可以研究創建一個自定義轉換器,看看是否有幫助。 http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.registerconverters.aspx –