如何从ASP Web服务的JSON响应中删除d:和__type

Nic*_*ico 5 asp.net json web-services asmx

我在网上找到了几个针对WCF Web服务而不是ASP Web服务的解决方案.

目前,我正在收到一条JSON响应说:

{"d":[{"__type":"NetworkFuzzWebSvc.Sessions","BaseUri":"http://localbox","SessionId":"43b8716f-40ab-43bf-8311-575c2ecd2730}]}
Run Code Online (Sandbox Code Playgroud)

我需要它返回:

{"Sessions":["BaseUri":"http://localbox","SessionId":"43b8716f-40ab-43bf-8311-575c2ecd2730}]}
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的Web服务代码的副本(NetFuzzWebSvc.asmx):

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Services;
using System.Web.Script.Services;

namespace NetworkFuzzWebSvc
{
    public class Sessions
    {
        public string BaseUri;
        public string SessionId;
    }

    /// <summary>
    /// Summary description for NetFuzzJson
    /// </summary>
    [WebService(Namespace = "http://localbox")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

    [ScriptService]
    public class NetFuzzJson : WebService
    {
        List<Sessions> Sessions = new List<Sessions>
        {
            new Sessions{
                        BaseUri = "http://localbox/", 
                        SessionId="43b8716f-40ab-43bf-8311-575c2ecd2730"
            }
        };

        [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public List<Sessions> GetAllSessions()
        {
            return Sessions;
        }
    }  
Run Code Online (Sandbox Code Playgroud)

有人有解决方案吗?谢谢!

Dav*_*ker 1

我不认为你可以。我认为这就是返回的 json 的格式。

您可以尝试去掉 ResponseFormat 位并返回一个字符串并使用

JavaScriptSerializer ser = new JavaScriptSerializer(); 
string json = ser.Serialize(objectClass);
return json;
Run Code Online (Sandbox Code Playgroud)

或者更好地使用 JSON.Net 库。

另请参阅如何不序列化 JSON 对象上的 __type 属性,了解如何删除 __type 位。