0

我正在开发一个引用 ac# WinRT 项目的 Windows 8 Metro 应用程序。除其他外,c# 项目向 Azure 服务发出 Web 请求,以对 SQL Azure 数据库执行 CRUD 操作。

在服务上执行 POST 操作时,我正在序列化一个类的实例并将其放入请求的正文中。

public sealed class Foo
{
    int FooId { get; set; }
    DateTimeOffset FooDate { get; set; }
}

当它使用 序列化时DataContractJSONSerializer,结果是这样的:

{"FooId":1,"FooDate":{"DateTime":"/Date(1342732970000)/","OffsetMinutes":-420}}

仅供参考,这是 2012 年 7 月 19 日下午 2:22:50 -07:00。

好的,太好了......唯一的问题是 Azure 服务只需要一个DateTime,而不是一个DateTimeOffset. 我不拥有 Azure 服务,因此无法更改其行为。

所以(忽略我正在丢失偏移量)我需要的是序列化为:

{"FooId":1,"FooDate":"/Date(1342732970)/"}

我的第一种方法是使用返回部分的DateTimegetter 向类添加一个新的别名属性/数据成员。但是,WinRT 不支持 DateTime 类型。DateTimeDateTimeOffset

有几种 hacky 方法可以解决这个问题,但我想看看是否有一种优雅的方法可以做到这一点,然后再诉诸其中一种:

  • POST前序列化结果的正则表达式
  • 返回 JSON 格式日期的类的字符串属性

谢谢

4

1 回答 1

1

我最终在类上实现了一个属性,它使用了一个适当地格式化日期的 getter。

我用 IgnoreDataMember 属性修饰了 Foo 字段,以便在序列化过程中忽略它。然后我添加了一个新字段,并为其赋予了 Foo 的别名以进行序列化。

谢谢

于 2012-07-31T21:34:14.613 回答