¿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

Related Posts:

Declarar un array de structs de tamaño dinamico – c++
Pregunta: buenas, lo que quiero conseguir es declarar un struct con array que tenga su tamaño dinamico, pero cuando lo hago el programa se me ...
Problemas con el registro de un archivo .tlb – c# windows vb6
Pregunta: La situación es la siguiente: He creado un pequeño proyecto de librería de clases en C# que me permita realizar ciertas operaciones. El nombre del ...
Uso de js y c# en unity. ¿Igual rendimiento? – javascript c# unity3d
Pregunta: Estoy comenzando con unity . Y veo que se pueden usar c# y js para programar. Mi pregunta es si tanto c# como js ...
Cómo puedo incluir librería beecrypt en un proyecto en C – c
Pregunta: Tengo un archivo .lib (librería) y quiero usarla en un proyecto de C. Para ser más especifica estoy intentando instalar beecrypt que es una librería ...
Problemas con petición ajax en angularjs – angularjs json
Pregunta: Hola estoy en un proyecto y necesito mostrar los datos consumidos en la vista final. Lo estoy haciendo es mediante POST de la siguiente ...
Ocultar y Mostrar con Mapa de Google – javascript c# asp.net
Pregunta: Tengo un div en mi página ASP.NET que contiene un Mapa de Google, y necesito mostrarlo y ocultarlo pero no me funciona. Este es el ...
para que sirve #ifdef_MSDOS_ en c++? – c++
Pregunta: He tenido problemas porque donde trabajo usan una versión de dev c++ 4.9 y yo uso en mi hogar la 5.1, ...
¿Como instalar C# en SublimeText? – c# sublimetext3 sublimetext
Pregunta: El problema es que actualmente quiero programar sobre esta tecnologia, pero no quiero descargar aun el visual studio porque consume recursos y es bastante ...
¿Cómo mostrar cualquier contenido HTML con ng-bind-html y $sce? – javascript angularjs json
Pregunta: El contenido HTML de mi página está compuesto por archivos JSON, todas las etiquetas se muestran correctamente, como las <h1>, <p>, <img>, etc... Pero ...
Thread en c++ error compilacion – c++
Pregunta: Estoy empezando con threads y he estado siguien varios tutos y creo que esta todo bien, pero a la hora de ejecutarlo me da ...
Resultado: [object], [object] al importar un archivo JSON – javascript jquery json
Pregunta: Tengo un problema para obtener datos de un archivo JSON, cuándo intento obtener los datos de este archivo, obtengo como resultado: , { ...
¿Es posible capturar un segfault con try/catch? – c++ try-catch
Pregunta: Para comprobar si es posible hice lo siguiente: try { int *x = 0; *x = 1234; } catch(...) { ...
Conexion C# con PostgreSQL mediante proveedor Npgsql – c# postgresql
Pregunta: Hola el problema es que la conexión esta bien solo cuando estoy utilizando el ODBC, pero cuando lo cambio al proveedor de PostgreSQL Npgsql, ...
Construcción extraña: objeto = funcion1() && funcion2() ¿Posible? – c#
Pregunta: acabo de encontrarme en una documentación una construcción como esta: var pose = Body.LeftHand.Near(Body.Head) && Body.LeftArm.Bended(90); posees una objeto que debe crearse a partir de la ...
alguien sabe porque no imprime el json – php json
Pregunta: $from $to = 20; $query = "SELECT idempleados,nombre,apellidos FROM empleados LIMIT ?,?"; $result = $mysqli->prepare($query); $result->bind_ param('ii', $from, $to); $result->execute(); /* bind result variables */ $result->bind_result($idempleados,$nombre,$apellidos); /* fetch values */ while ($result->fetch()){ ...

Add a Comment

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