2
votes

Format de Control Guid dans la réponse de l'action ASP.NET Core

Supposons que mon action ASP.NET Core (API) renvoie un objet avec cette propriété:

[WhatGoesHere("N")]                  // ?
public Guid MyGuid { get; set; }

Il sera sérialisé comme ffd76e47-609f-42bc-b6b8-b66dedab5561 code>.

Je veux qu'il soit sérialisé comme ffd76e47609f42bcb6b8b66dedab5561 . Dans le code qui serait myGuid.ToString("N").

Y a-t-il un attribut que je peux utiliser pour contrôler le formatage?


2 commentaires

Vous pouvez remplacer votre '-' valeur par '' et vous obtenez la chaîne selon vos besoins.


@ A.M.Patel Je pense que vous manquez le point. OP veut que cela se produise automatiquement.


3 Réponses :


3
votes

Vous pouvez implémenter un JsonConverter personnalisé cliquez ici . Et configurez votre application principale aspnet pour enregistrer ce JsonConverter pour le formatage de sortie. De cette façon, chaque fois que votre application sérialisera un Guid en JSON, vous l'obtiendrez comme vous le souhaitez:

[JsonConverter(typeof(MyCustomConverter))]
public class MyClass
{
    public Guid MyGuid { get;set; }
}

Vous pouvez également choisir des classes particulières pour utiliser le convertisseur au lieu de toutes , en utilisant cet attribut par-dessus:

public void ConfigureServices(IServiceCollection services)
{
    services
        .AddMvc()
        .AddJsonOptions(options => {
            options.SerializerSettings.Converters.Add(new MyCustomConverter());
    });
}


1 commentaires

Parfait merci! Consultez ma réponse ci-dessous pour une mise en œuvre.



3
votes

Pour un scénario simple comme le vôtre, le moyen le plus simple de le faire est d'avoir une autre propriété qui formate le MyGuid en utilisant MyGuid.ToString ("N") . Où "N" signifie que vous avez juste besoin des chiffres sans "-". Veuillez consulter la documentation

Vous pouvez ajouter [JsonIgnore] à MyGuid et ajouter l'attribut [JsonProperty ("MyGuid")] à l'autre propriété:

public class MyClass
{
    [JsonIgnore]
    public Guid MyGuid { get;set; }

    [JsonProperty("MyGuid")]
    public string DisplayGuid => MyGuid.ToString("N");
}

Avec ce qui précède en place, la propriété MyGuid sera ignorée. À la place, la propriété DisplayGuid sera renvoyée avec le nom MyGuid avec la valeur ffd76e47609f42bcb6b8b66dedab5561

Pour des scénarios plus complexes, vous pouvez optez sûrement pour une option JsonConverter personnalisée comme mentionné par @ r1verside. J'espère que cela aide


1 commentaires

Idée intéressante, qui ne nécessite pas la mise en œuvre d'un convertisseur ... merci!



2
votes

Basé sur la réponse de @ r1verside, voici mon implémentation:

[JsonConverter(typeof(GuidConverter), "X")]
public Guid MyGuid { get; set; }

Elle peut être utilisée comme ceci:

[JsonConverter(typeof(GuidConverter))]    // defaults to format of "N"
public Guid MyGuid { get; set; }

mais le format peut être remplacé:

using System;

namespace MyProject {

  public sealed class GuidConverter : JsonConverter<Guid> {

    public GuidConverter() { }

    public GuidConverter(string format) { _format = format; }

    private readonly string _format = "N";

    public override void WriteJson(JsonWriter writer, Guid value, JsonSerializer serializer) {
      writer.WriteValue(value.ToString(_format));
    }

    public override Guid ReadJson(JsonReader reader, Type objectType, Guid existingValue, bool hasExistingValue, JsonSerializer serializer) {
      string s = (string)reader.Value;
      return new Guid(s);
    }

  }
}


0 commentaires