是否有一种方法可以从asp.net web方法返回ISO格式的DateTime而不是JSON格式

本文关键字:格式 方法 ISO 返回 web DateTime JSON net asp 一种 是否 | 更新日期: 2023-09-27 18:12:42

目前,web方法或经典asp .net中的大多数方法都使用system.web.script.serialization进行序列化。Javascriptserializer 类,它返回javascript对象的datetime成员,其值如

"/日期(滴答数)/"

。我知道这是一个臭名昭著的问题,大多数人建议在我们收到数据或返回数据作为字符串而不是对象后使用某种转换器。

例如类
public class Person
{
    public String Name { get; set; }
    public int Age { get; set; }
    public DateTime DOB { get; set; }
}

如果通过带有[ScriptMethod(ResponseFormat = ResponseFormat. json)]装饰的System.Web.Services.WebMethod返回,响应将如下所示返回result.d

{Name:"Steve", Age:30, DOB:"/Date(1249335477787)/"};

我们需要应用一些代码将DOB转换为ISO格式或其他可接受的格式。

但我只是想看看是否有人做了某种响应调整或使用重写类从web方法返回DateTime值。是否有一种方法可以覆盖javascriptserializer的功能并在asp.net web方法中使用它,以便它直接以ISO格式返回日期?我知道它可以在asp.net MVC中以几种方式完成。

同样可以在asp.net web表单的web方法?这将节省大量的代码和bug:)

是否有一种方法可以从asp.net web方法返回ISO格式的DateTime而不是JSON格式

我从http://blog.icanmakethiswork.io/2012/04/beg-steal-or-borrow-decent-javascript.html找到了一个窍门。

这是为了替换JsonSerializer自己的日期序列化器,并使用自定义日期序列化器。

  • 重写system . web . script . serialize . javascriptconverter
  • 更新网页。配置部分将其应用于整个项目或使用RegisterConverters函数在本地使用

这是能够返回给我一个ISO格式的日期时间,我也能够传递这个在moment js内部的javascript操作

你可以很容易地在webmethod中声明响应类型。此外,您还可以使用此链接中描述的自定义序列化器,或者查看以下代码,了解如何格式化日期:

class DualDateJsonConverter : JsonConverter
{
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        JObject result = new JObject();
        DualDate dd = (DualDate)value;
        result.Add("DateOne", JToken.FromObject(dd.DateOne.ToString("MM.dd.yyyy")));
        result.Add("DateTwo", JToken.FromObject(dd.DateTwo));
        result.WriteTo(writer);
    }
    // Other JsonConverterMethods
    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(DualDate);
    }
    public override bool CanWrite
    {
        get
        {
            return true;
        }
    }
    public override bool CanRead
    {
        get
        {
            return false;
        }
    }
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }
}
 Context.Response.ContentType = "application/json";
 Context.Response.Write(response);