.net - serialize - Generar clases C#del esquema JSON
newtonsoft json linq (8)
Estoy creando un servicio web C # WCF que devuelve una gran cantidad de datos en formato JSON. El cliente es una aplicación de iPad que actualmente está siendo desarrollada por otro equipo, entonces estoy trabajando en especificaciones, sin datos de ejemplo.
Actualmente, la cadena JSON es creada por .NET Framework, mi servicio web está devolviendo un objeto C # que contiene toda la información que luego será serializada por el framework usando DataContracts.
Mi problema es que las especificaciones de comunicación solo contienen archivos de esquema JSON (basados en http://json-schema.org/ ). Para facilitar el desarrollo me gustaría generar las clases correspondientes en C # pero como los archivos contienen bastante información y hay una docena de archivos, realmente no quiero crear esas clases manualmente.
Así que estoy buscando una herramienta que me permita:
- Para generar clases C # desde un esquema JSON.
- Para convertir un esquema JSON en un archivo XSD. Entonces sería fácil crear las clases, ya que hay muchas herramientas para generar clases desde XSD.
Encontré muchas herramientas para validar una cadena JSON contra un esquema JSON o para generar clases a partir de la cadena JSON, pero nada que parezca ayudarme.
Existe JSON.NET pero parece ser una biblioteca y no una herramienta y no encontré información sobre cómo generar clases con ella.
Entonces, si alguien conoce una herramienta o tiene una idea sobre cómo podría generar esas clases (probé una herramienta que crea las clases en Java pero no pude hacerlo funcionar).
Así que estoy buscando una herramienta que me permita: generar clases C # desde un esquema JSON ...
No lo he usado yo mismo, así que no puedo comentar mucho al respecto, pero parece que la herramienta " json-schema-to-poco " se ajustaría a lo que necesita.
Por su léame github:
Convierte archivos de esquema JSON en simples objetos CLR antiguos en C #. Útil para ejecutarse como parte de un proceso de compilación automatizado.
Aquí hay un generador de clases en línea que he usado en el pasado para generar clases C # a partir de un conjunto de muestra de datos JSON:
Busque esta biblioteca en Nuget. La NJsonSchema.CodeGeneration se puede usar para generar código C # o TypeScript a partir de un esquema JSON:
var generator = new CSharpGenerator(schema);
var file = generator.GenerateFile();
La variable de archivo ahora contiene el código C # para todas las clases definidas en el esquema JSON.
Necesitaba una clase generada hoy pero no pude encontrar ningún sitio que pudiera convertir el esquema de json en clases de c # en línea, así que usé la biblioteca mencionada anteriormente y escribí algo rápidamente http://json2csharp.rohitl.com/ Espero que esto ayude.
Eche un vistazo a la Ayuda de Json.NET. Hay un espacio de nombres Json.Schema que puede ser útil.
http://james.newtonking.com/projects/json/help/
Json.NET - Quick Starts & API Documentation Newtonsoft.Json.Schema Namespace Namespaces ► Newtonsoft.Json.Schema
La página del proyecto: JSON.NET
Hoy tuve una necesidad de esto y no vi ninguna respuesta sólida a su pregunta, así que lo mejoré. No es perfecto, pero es un buen punto de partida para construir.
Para responder esto correctamente, necesita saber qué versión (borrador) tiene el Esquema Json.
Ejemplos de las bibliotecas que pueden manejar qué esquema (2018-01-19):
Json.NET Schema supports draft 3, draft 4, draft 6 (MIT)
Manatee.Json supports draft 4, draft 6, draft 7 (MIT)
NJsonSchema supports draft 4 (Ms-PL)
http://json-schema.org/implementations.html#validator-dotnet
Con NJsonSchema.CodeGeneration
tampoco puede enviar el json
real directamente, primero debe convertirlo a un esquema real (a menudo obtendrá el error: Unable to cast object of type ''System.String'' to type ''NJsonSchema.JsonSchema4
contrario).
Ejemplo con código en ejecución, carpeta de Schemas
ubicada en la raíz del proyecto:
class Program
{
static void Main(string[] args)
{
var location = Assembly.GetExecutingAssembly().Location;
var path = Path.GetFullPath(Path.Combine(location, @"../../../Schemas/"));
var schemaJson = File.ReadAllText($"{path}Test.json");
var schema = JsonSchema4.FromJsonAsync(schemaJson).Result;
var generator = new CSharpGenerator(schema);
var generatedFile = generator.GenerateFile();
}
}
Puede usar la biblioteca NJsonSchema para leer un esquema JSON o generar uno de un tipo y generar una clase C # a partir de él.
Si necesita una GUI para estas tareas, puede probar la GUI NSwagStudio desde las herramientas NSwag para hacerlo ... (también se basa en NJsonSchema)