2012-06-08 100 views
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/

+0

從來沒有使用過它,但你可以研究創建一個自定義轉換器,看看是否有幫助。 http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.registerconverters.aspx –

回答

0
  1. 使用C#庫對象轉換成JSON字符串
  2. 從服務器發送JSON字符串。
  3. 在客戶端使用var obj = $ .parseJSON(jsonString);