Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

366
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!