2017-02-13 10 views
0

オブジェクトをシリアル化して文字列値を照会するとき、Flurlのデフォルトの動作をオーバーライドするにはどうすればよいですか?例えば。以下のコードFlurl(Fluent Url)カスタムシリアル化

DateTime date = new DateTime(2017, 1, 2, 3, 4, 5); 
Url url = "http://domain.com".SetQueryParam("date", date); 

は、次のURLを生成します。

http://domain.com?date=01%2F02%2F2017%2003%3A04%3A05 

私がしたいことはこれです:

次のように日付をシリアル化した結果だろう

http://domain.com?date=2017-01-02T03%3A04%3A05.0000000 

date.ToString("O") 

答えて

0

Flurlが注意を払うURLエンコーディングはそれを超えていますが、カスタム文字列のフォーマットにはまったく関係ありません。以下のための1つの(あなたがあなた自身の拡張メソッドを追加することができます、あなたはこれをたくさんやって、フォーマットのビットを毎回指定しないようにしたいしている場合

"http://domain.com".SetQueryParam("date", date.ToString("O")); 

:私はあなたが欲しいものを行うための最も明白な方法はこれです推測しますpatternあたりUrlstringに1つ、):

public static Url SetDateParam(this Url url, string name, DateTime date) 
{ 
    return url.SetQueryParam(name, date.ToString("O")); 
} 

public static Url SetDateParam(this string url, string name, DateTime date) 
{ 
    return new Url(url).SetDateParam(name, date); 
} 

は、その後、あなたが持っている:

"http://domain.com".SetDateParam("date", date); 
+0

をおかげで@Tod、それはFlurlがSを定義することはできません残念ですさまざまなタイプの消去ルール。さらに厄介なのは、日付のシリアライゼーションはスレッドの現在のカルチャを尊重するものではなく、m/d/yとしてハードコードされているということです。なぜ私が達成しようとしていた正式なy-m-d形式ではないでしょうか?クエリ文字列中の日付を、例えばサーバー上で実行しているサーバーに送信するとオーストラリアの地域設定では、それをd/m/yとして解釈しようとし、私の日付の半分が間違って出てくるでしょう。今のところ私はFlurlを使わないことにして、自分のクエリ文字列ビルダーを書いた。 – Andrew

+1

@Andrewここではいくつかの点であなたの判断を質問する。まず、誰も今までに求めていない機能が存在しないということは、恥ずべきことではありません。ここで不平を言う前にGitHubで提案をロギングするかPRを提出することを検討しましたか?第二に、私はあなたがFlurlでしたいことをするための2つの非常に簡単で、簡単な解決策を提案しました。あなたがそれらを読んで理解していて、それを捨てて自分のビルダーを書くことが最善の選択肢であると結論づけたら、私はあなたの思考プロセスに従わないことを恐れています。 –

+0

@@ Todd申し訳ありませんが、私はあなたがFlurlの作者であることを気付かず、私のコメントを個人的に受け入れるかもしれません。私は一般的にコンポーネントを批判していない、私はそれが素晴らしいと思うし、私はこの動作を発見するまで、それを使用するためのすべての意思を持っていた。あなたが提案したソリューションは私にとってはうまくいかないでしょう。あなたはあなたが「私の思考プロセスに従わない」と言っていますが、私の正確な要件はわかりません。私は率直にも、曖昧さのないy-m-dを使用するのではなく、日付のシリアライズをm/d/yとしてハードコードすることに決めたときに、あなたの思考プロセスに従わない。説明していただけますか? – Andrew

関連する問題