Web Services 如何删除d:以及ASP Web服务的JSON响应中的__type

k5hmc34c  于 2023-02-19  发布在  其他
关注(0)|答案(4)|浏览(266)

我已经找到了几个解决方案,这在网络上是为WCF的网络服务,而不是ASP的网络服务。
目前,我收到一个JSON响应,内容如下:

{"d":[{"__type":"NetworkFuzzWebSvc.Sessions","BaseUri":"http://localbox","SessionId":"43b8716f-40ab-43bf-8311-575c2ecd2730}]}

我需要它返回:

{"Sessions":["BaseUri":"http://localbox","SessionId":"43b8716f-40ab-43bf-8311-575c2ecd2730}]}

下面是我正在使用的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;
        }
    }

有人能解决这个问题吗?谢谢!

oxalkeyp

oxalkeyp1#

对于删除"d"和"__类型":
. svc

[ServiceContract]
public interface ITestService
{
    [OperationContract]
    [WebInvoke(Method = "POST",RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
    List<TestDTO> GetAll();
}

.配置文件

<behaviors>
  <endpointBehaviors>
    <behavior name="DebugJSonBehavior" >
      <enableWebScript />
      <!--need set automaticFormatSelectionEnabled attribute -->
      <webHttp automaticFormatSelectionEnabled="true" />
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="DebugJSonBehavior" >
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug httpHelpPageEnabled="true" includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>

日本:

$.ajax({
        type: "POST",
        url: _serviceUrl + "/TestService.svc/GetAll",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (dataret) { ... },
        error: function (xmlHttpRequest, textStatus, errorThrown) {... },
        complete: function () { ... }
    });
wi3ka0sx

wi3ka0sx2#

我不认为你可以,我认为这是返回的json的格式。
您可以尝试去掉ResponseFormat位,返回一个字符串并使用

JavaScriptSerializer ser = new JavaScriptSerializer(); 
string json = ser.Serialize(objectClass);
return json;

或者使用JSON.net库更好。
另请参阅How to not serialize the __type property on JSON objects,了解如何删除__type位。

to94eoyn

to94eoyn3#

我有同样的问题,我的解决方案是使用Newtone Json转换:

return JsonConvert.DeserializeObject<List<TestDTO>>(JsonConvert.SerializeObject(result))

你也可以在aspx的网页中使用这个解决方案(web方法)

jchrr9hc

jchrr9hc4#

如果您使用的是ServiceStack.Text JSON Serializer,则只需:

JsConfig.ExcludeTypeInfo = true;

这个功能在v2.28中被自动添加了回来,但是上面的代码将其排除在序列化之外。你也可以通过Type改变这个行为:

JsConfig<Type>.ExcludeTypeInfo = true;

相关问题