Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

363
Vistas
C# Json.NET Render Flags Enum como matriz de cadenas

En una aplicación .NET, tengo un conjunto de valores que se almacenan como una [Flags] enum . Quiero serializarlos en json, pero en lugar de que el resultado sea un número entero, me gustaría obtener una matriz de cadenas para las banderas que están activas.

Así que si tengo el siguiente código

 [Flags] public enum F { Val1 = 1, Val2 = 2, Val4 = 4, Val8 = 8 } public class C { public F Flags { get; set; } } string Serialize() { return JsonConvert.SerializeObject(new C { Flags = F.Val1 | F.Val4 }); }

Quiero que el método Serialize() regrese:

 "{ Flags: [ "Val1", "Val4" ] }"

En vez de:

 "{ Flags: 5 }"
about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Tienes que implementar tu propio convertidor. Aquí hay un ejemplo (una forma particularmente sucia y complicada de hacerlo, pero sirve como una buena demostración):

 public class FlagConverter : JsonConverter { public override object ReadJson(JsonReader reader, Type objectType, Object existingValue, JsonSerializer serializer) { //If you need to deserialize, fill in the code here return null; } public override void WriteJson(JsonWriter writer, Object value, JsonSerializer serializer) { var flags = value.ToString() .Split(new[] { ", " }, StringSplitOptions.RemoveEmptyEntries) .Select(f => $"\"{f}\""); writer.WriteRawValue($"[{string.Join(", ", flags)}]"); } public override bool CanConvert(Type objectType) { return true; } }

Ahora decora tu enumeración así:

 [Flags] [JsonConverter(typeof(FlagConverter))] public enum F { Val1 = 1, Val2 = 2, Val4 = 4, Val8 = 8 }

Y su código de serialización de ejemplo ahora generará esto:

 {"Flags":["Val1", "Val4"]}
about 4 years ago · Santiago Trujillo Denunciar

0

Decora tu enum

 [Flags] [JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] public enum F { Val1 = 1, Val2 = 2, Val4 = 4, Val8 = 8 }

Producción:

{"Banderas":"Val1, Val4"}

Me doy cuenta de que JSON no es una matriz como en su pregunta, no estaba seguro de si esto era necesario ya que también es JSON válido.

about 4 years ago · Santiago Trujillo Denunciar

0

Usé la respuesta anterior de @DavidG, pero necesitaba una implementación para ReadJson. Esto es lo que junté:

 public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { int outVal = 0; if (reader.TokenType == JsonToken.StartArray) { reader.Read(); while (reader.TokenType != JsonToken.EndArray) { outVal += (int)Enum.Parse(objectType, reader.Value.ToString()); reader.Read(); } } return outVal; }
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda