【问题标题】:Empty JSON.NET JObject from Asp.net WebMethod来自 Asp.net WebMethod 的空 JSON.NET JObject
【发布时间】:2017-11-19 07:56:32
【问题描述】:

我正在努力从 Asp.net WebMethod(无 MVC 或 Web.API)返回 JSON.NET JObject

我不想使用字符串而不是 JObject,并且我需要使用匿名对象,因此我无法将其映射到已知类。

这是代码的精简版:

Asp.net 网络方法:

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
public class DataRoomService : WebServiceBase
{
    [WebMethod(EnableSession = true)]
    [ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json, XmlSerializeString = false)]
    public JObject Load(int id)
    {
            var rtn = new
            {
                Gender = true,
                Age = 56,
                Weigth = 102.4,
                Date = DateTime.Now.AddDays(-7)
            };
            return JObject.FromObject(rtn);
    }

jQuery ajax 请求:

$.ajax({
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    url: url,
    data: input === '' ? '{}' : input,
    async: useasync,
    success: function (data) {
        ...
    }, ...

结果:"{"d":[[[]],[[]],[[]],[[]]]}"

【问题讨论】:

    标签: c# asp.net ajax web-services json.net


    【解决方案1】:

    问题在于 ASMX Web 服务在内部使用JavaScriptSerializer,它不知道如何序列化JObject。但是您根本不需要在这里使用JObject——只需将您的网络方法更改为返回object 并直接返回匿名对象:

    public object Load(int id)
    {
        var rtn = new
        {
            Gender = true,
            Age = 56,
            Weight = 102.4,
            Date = DateTime.Now.AddDays(-7)
        };
        return rtn;
    }
    

    请注意,JavaScriptSerializer 以 Microsoft 格式 ("\/Date(1497023008910)\/") 而非 ISO 8601 ("2017-06-16T15:56:05Z") 序列化日期。如果您需要 ISO 8601,则需要确保在匿名对象中手动格式化日期,然后再返回:

           Date = DateTime.UtcNow.AddDays(-7).ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ssK")
    

    【讨论】:

    • 我以为是这个原因,希望可以换掉。感谢您的回复。无论如何,我想我会切换到 web.api,因为我需要验证和保存一个匿名对象,并且我需要 JObject 的功能
    • 是的,如果可以的话,我绝对会推荐切换到 Web API。 ASMX 现在已经过时了,扩展性不是很好,例如它没有一种简单的方法来替换我所知道的序列化程序。
    猜你喜欢
    • 1970-01-01
    • 2013-01-04
    • 2017-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 2012-11-29
    相关资源
    最近更新 更多