¿Cómo puedo crear una estructura JSON en C#? – c# json visual-studio

Pregunta:


Estoy tratando de crear un archivo JSON para que sea inyectado a través de un WebService hacia un servicio de un tercero, el cual va a llenar datos en un formulario dinámico.

El tema es que la estructura que debo respetar, según las especificaciones del proveedor, por poner un ejemplo ya que el modelo tiene una mayor cantidad de valores a transmitir, es la siguiente:

{ "f": "546",
  "efs": { "1":"Ubicación",
           "2":"Categoría",
           "3":"Contacto",
           "4":"Celular" } }

He revisado varios artículos de referencia, pero al crear la clase que necesito no puedo utilizar números como tags/marcadores (si es que se llaman asi) y por ende me veo obligado a usar lo siguiente:

    public class form_addsModel
    {
       public string f { get; set; }
       public efsModel efs { get; set; }
    }

    public class efsModel
    {
        public string _1 { get; set; }
        public string _2 { get; set; }
        public string _3 { get; set; }
        public string _4 { get; set; }
    }

El resultado esperado no llega a ser el adecuado, y la verdad es que no sé que tan factible sea construir un JSON con esas características y restricciones planteadas por el proveedor.

Actualmente estoy trabajando en C# con Visual Studio 2012.

Preguntado por: Juan Manuel Palacios

Kroneaux Schneider

No puedes nombrar variables/propiedades como números, pero puedes utilizar una estructura de datos como un IDictionary:

public class form_addsModel
{
   public string f { get; set; }
   public System.Collections.Generic.IDictionary<int, string> efs { get; set; }
}

...
public void CrearJson()
{
    form_addsModel model = new form_addsModel();
    model.f = "...";
    model.efs = new Dictionary<int, string>()
    {
        { 1, "Ubicación" },
        { 2, "Categoría" },
        { 3, "Contacto" },
        { 4, "Celular" },
    }
    ...
}

Dentro de un Dictionary puedes recrear sin problemas la estructura key/value que reina en JSON, y te da la flexibilidad de usar también números para representar el “nombre” de cualquiera de los índices que encuentre. En el ejemplo, nada te detiene de usar en lugar de una pareja int - string una pareja string - string y usarla así:

IDictionary<string, string>();

{
    { "1", "Ubicación" },
    ...
}

Si como comentaban para estos casos usaríamos un Dictionary<int, string>

public class claseEjemplo
{
    public int f  { get; set; }
    public Dictionary<int, string> efs { get; set; }

    public claseEjemplo()
    {
        efs = new Dictionary<int, string>();
    }
}

Y para serializarlo a una cadena JSON usamos la libreria https://www.newtonsoft.com/json

claseEjemplo obj = new claseEjemplo();
obj.f = 546;
obj.efs.Add(1, "Ubicación");
obj.efs.Add(2, "Categoría");
obj.efs.Add(3, "Contacto");
obj.efs.Add(4, "Celular");

string miJson = JsonConvert.SerializeObject(obj);

Console.WriteLine(miJson);

Ejemplo en linea: https://dotnetfiddle.net/CpMStk

Fuente

Add a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *