2

簡単そうな質問ですが、本当に難しい質問です。

私はこのようなものを書きました

[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);
            }
        });
    }
});
}

正常に動作します。しかし、アコーディオンのプロパティがnullの場合。そのプロパティはJSON文字列に表示され、その値はnullです。System.Web.Script.Services.ScriptServiceで使用されるJavaScriptSerializerがnullプロパティを無視するため、json文字列で生成しないようにします。私はたくさん検索しましたが、JavaScriptSerializerではこれができないと思います。JavaScriptSerializerを変更する簡単な方法はありますか?たとえば、ScriptServiceのデフォルトのformmaterとして代わりにJSON.netを使用しますか、またはJSONにシリアル化するときにnullプロパティの生成を無視するにはどうすればよいですか?

4

1 に答える 1

0
  1. http://json.org/のC# ライブラリを使用して、オブジェクトを json 文字列に変換します
  2. サーバーからjson文字列を送信します。
  3. クライアント側で var obj = $.parseJSON(jsonString); を使用します。
于 2012-06-11T05:39:48.440 に答える