2017-02-13 3 views
0

Comment remplacer le comportement par défaut de Flurl lors de la sérialisation des objets pour interroger les valeurs de chaîne? Par exemple. le code ci-dessousNumérotation personnalisée Flurl (Fluent Url)

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

produit l'adresse suivante:

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

Ce que je veux est la suivante:

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

qui serait le résultat de sérialisation la date comme suit:

date.ToString("O") 

Répondre

0

Flurl prend soin de f L'encodage d'URL mais au-delà ne concerne pas vraiment le formatage de chaîne personnalisé. Je suppose que la façon la plus évidente à faire ce que vous voulez est le suivant:

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

Si vous faites cela beaucoup et que vous voulez éviter de spécifier le formatage peu à chaque fois, vous pouvez ajouter vos propres méthodes d'extension (un pour Url et un pour string, par le pattern):

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); 
} 

Ensuite, vous avez:

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

Merci @Tod, il est dommage Flurl ne permet pas de définir s règles d'éralisation pour différents types. Encore plus ennuyante est cette date que la sérialisation ne respecte même pas la culture actuelle du fil et est codée en dur comme m/d/y. Pourquoi pas le format canonique y-m-d, qu'est ce que j'essayais de réaliser? Si j'envoie une date dans la chaîne de requête à un serveur fonctionnant par ex. Les paramètres régionaux australiens, il essayera de l'interpréter comme d/m/y et la moitié de mes dates se tromperont. Pour l'instant j'ai décidé de ne pas utiliser Flurl et j'ai écrit mon propre générateur de chaînes de requête ... – Andrew

+1

@Andrew Je remets en question votre jugement ici à plusieurs égards. Tout d'abord, je ne trouve pas honteux du tout qu'une fonctionnalité n'existe pas que personne n'a demandé jusqu'à présent. Avez-vous envisagé d'enregistrer une suggestion ou de soumettre un RP sur GitHub avant de vous plaindre ici? Deuxièmement, j'ai suggéré 2 solutions très simples et directes pour faire ce que vous voulez avec Flurl. Si vous les lisez et les comprenez et que vous en concluez encore que l'abandonner et écrire votre propre constructeur est votre meilleure option, alors j'ai peur de ne pas suivre votre processus de pensée. –

+0

@@ Todd désolé, je ne savais pas que vous étiez l'auteur Flurl, et pourrait prendre mon commentaire personnellement. Je ne critique pas le composant en général, je pense que c'est génial et j'avais toutes les intentions de l'utiliser jusqu'à ce que je découvre ce comportement. Les solutions que vous avez proposées ne fonctionneront pas pour moi. Vous dites que vous «ne suivez pas mon processus de pensée», mais vous ne connaissez pas exactement mes besoins. Franchement, je ne suis pas non plus votre façon de penser lorsque vous avez décidé de sérialiser la date de sérialisation en m/j/y plutôt que d'utiliser un y-m-d non ambigu. Pouvez-vous s'il vous plaît expliquer? – Andrew