2011-06-15 71 views
46

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 es serializada por el framework usando DataContracts.Generar clases C# del esquema JSON

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 ya sea:

  • para generar clases de C# a partir de 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.
Hay JSON.NET pero parece ser una biblioteca y no una herramienta y no encontré información sobre cómo generar clases con ella.

Así que 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).

+0

Esta pregunta no es exactamente lo que estoy buscando. No tengo ninguna cadena JSON, solo tengo un esquema JSON. Hay herramientas para cadena JSON -> Clase. Pero no puedo encontrar uno para JSON Schema -> Class. –

Respuesta

0

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

- Inicia rápida & API Documentación Newtonsoft.Json.Schema Espacio de nombres Los espacios de nombres ► Newtonsoft.Json.Schema página

El proyecto: http://json.codeplex.com/

+1

Sí, he visto eso, pero aparte de construir mi propio generador de clases (que probablemente haré si no encuentro una herramienta existente), no creo que pueda ayudarme a generar esas clases sin demasiado mucho esfuerzo. –

+0

@JulienN ¿alguna vez escribiste tu propio generador de clases? –

+0

Lo siento, no lo recuerdo, pero no lo creo, probablemente no tuve tiempo, lo habría publicado si lo hubiera hecho :). 3 años después, todavía no existe? –

-1

Aquí es una línea generador de clases que he usado en el pasado para generar clases C# a partir de un conjunto de muestra de datos JSON:

http://json2csharp.com/

+0

y también ver http://jsonclassgenerator.codeplex.com/ –

3

So I'm looking for a tool that would allow me either : To generate C# classes from a JSON Schema...

No he utilizado yo mismo así que no puedo comentar demasiado sobre ello, pero parece que la función "json-schema-to-poco" se ajuste a lo que necesita.

por su readme github:

Converts JSON schema files into plain old CLR objects in C#. Useful for running as part of an automated build process.

+0

Desafortunadamente, json-schema-to-poco es solo un stub sin una implementación real – altso

1

que tenían una necesidad de esto hoy y no vimos ninguna respuestas sólidas a tu pregunta para que Azoté esto. No es perfecto, pero es un buen punto de partida para construir.

https://gist.github.com/rushfrisby/c8f58f346548bf31e045

+1

Bueno, el suyo es el primer esquema para el generador de código, y no el ejemplo json para código gen He encontrado que realmente funciona. – Vdex

+1

He arrancado descaradamente el código de @rushonroeks y lo he dividido para que pueda generar otros códigos/modelos, específicamente modelos de vista eliminada: https://gist.github.com/RhysC/480e7a758639a3215701 – RhysC

+0

Tenga en cuenta que el código de rushonerok se basa en JSON.NET que aún no se ha actualizado para admitir JsonSchema v4: https://github.com/JamesNK/Newtonsoft.Json/issues/115 – cbp

5

Puede utilizar la biblioteca NJsonSchema para leer un esquema JSON o generar uno de un tipo, y generar una clase C# de ella.

Si necesita una interfaz gráfica de usuario para estas tareas, se puede tratar la GUI NSwagStudio de los NSwag herramientas para hacerlo ... (que también se basa en NJsonSchema)

+3

Debe revelar que usted es el desarrollador real – Marco

+0

También hay un editor visual json: https://github.com/rsuter/VisualJsonEditor – juFo

16

buscar esta biblioteca en Nuget. El NJsonSchema.CodeGeneration se puede utilizar para generar código C# o mecanografiado de un esquema JSON:

var generator = new CSharpGenerator(schema); 
var file = generator.GenerateFile(); 

la variable de archivo contiene ahora 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.

0

Para responder correctamente esto, necesita saber qué versión (borrador) tiene el Esquema Json.

ejemplos que las bibliotecas pueden manejar los cuales esquema (19/01/2018):

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 no se puede enviar el actual json directamente o bien, primero tiene que convertir a un esquema real (a menudo obtendrá el error: Unable to cast object of type 'System.String' to type 'NJsonSchema.JsonSchema4 de lo contrario).

ejemplo con el código de ejecución, Schemas carpeta que se encuentra 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(); 
    } 
} 
Cuestiones relacionadas