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:50PM -07:00 です。

わかりました... 唯一の問題は、Azure サービスがDateTimeではなくだけを期待していることDateTimeOffsetです。Azure サービスを所有していないため、その動作を変更できません。

したがって、(オフセットを失っていることを無視して)シリアル化する必要があるのは次のとおりです。

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

DateTime私の最初のアプローチは、新しいエイリアスプロパティ/データ メンバーをクラスに追加しDateTimeDateTimeOffset. ただし、WinRT は DateTime 型をサポートしていません。

これを回避するハックな方法がいくつかありますが、これらのいずれかに頼る前に、これを行うエレガントな方法があるかどうかを確認したかったのです。

  • POST前のシリアル化結果の正規表現
  • JSON 形式の日付を返すクラスの文字列プロパティ

ありがとう

4

1 に答える 1

1

日付を適切にフォーマットするゲッターを使用して、クラスにプロパティを実装することになりました。

シリアル化中に無視されるように、Foo フィールドを IgnoreDataMember 属性で装飾しました。次に、新しいフィールドを追加し、シリアル化のために Foo のエイリアスを付けました。

ありがとう

于 2012-07-31T21:34:14.613 に答える