【问题标题】:Ignore DateTime prop from being serialized (not working)忽略 DateTime 道具被序列化(不工作)
【发布时间】:2012-07-20 06:45:04
【问题描述】:

我已经尝试过this解决方案中提出的解决方案

我有课

public class MyClass
{
    [IgnoreDataMember]
    public DateTime? Date { get; set; }
}

当 JavaScriptSerializer 序列化结果时,它会更改日期时间,例如,如果我的数据库中有 2012-07-20 在序列化后返回为 2012-07-21,因为应用程序托管在我的时区之外的位置因此我面临很多问题

【问题讨论】:

    标签: asp.net-mvc-3 javascriptserializer


    【解决方案1】:

    您可以使用 [ScriptIgnore] 属性来排除属性,使其不被 JavaScriptSerializer 序列化:

    public class MyClass
    {
        [ScriptIgnore]
        public DateTime? Date { get; set; }
    
        ... some other properties
    }
    

    话虽如此,正确的方法是使用一个视图模型,它根本不会包含您不希望包含在响应中的属性,然后返回这个视图模型而不是 使用关于序列化的管道代码折磨你的域模型,他们应该绝对不知道。

    【讨论】:

    • 感谢 Darin 的回复,我已经在使用 viewmodel,我需要显示它包含在模型中的日期,当我这样做时我也尝试了 `[ScriptIgnore]' 选项我想我排除了生成的 json 的道具形式。为什么我试图忽略 datetime 属性是我怀疑当它被序列化时,它会将我的日期更改为某种 utc 格式,从而在我的当前日期添加 1 天的偏移量......
    • 我不明白你在说什么。请提供一个完整的示例(模型、控制器、视图)来说明您的问题。理想情况下对值进行硬编码,这样我就不需要创建数据库或其他东西来重现问题。
    • 很难删掉相关代码,让我解释一下这个问题,我在 GMT +5 区,我在美国托管了我的应用程序,它在不同的时区,我已经处理了我的代码中的日期时间转换,但问题是当我序列化包含日期时间的结果时,序列化程序将其转换为 UTC 时间戳,数据库中的实际日期是 '2012-07-20' 但是当我将其转换为 json 使用JavaScriptSerializer 它将其转换为 utc 时间戳,相当于 1342869568 我尝试将我的时间转换为 utc,没有效果
    • ... 所以当我在视图中反序列化 json 时,它给了我2012-07-21
    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2015-02-24
    • 2012-07-27
    • 2012-01-22
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多