Programing

JSON 스키마에서 C # 클래스 생성

lottogame 2020. 12. 13. 08:34
반응형

JSON 스키마에서 C # 클래스 생성


JSON 형식으로 많은 데이터를 반환하는 C # WCF 웹 서비스를 만들고 있습니다. 클라이언트는 현재 다른 팀에서 개발중인 iPad 애플리케이션이므로 예제 데이터없이 사양 작업을하고 있습니다.
현재 JSON 문자열은 .net 프레임 워크에 의해 생성되고 내 웹 서비스는 DataContracts를 사용하여 프레임 워크에 의해 직렬화되는 모든 정보를 포함하는 C # 개체를 반환합니다.

내 문제는 통신 사양에 http://json-schema.org/ 기반의 JSON 스키마 파일 만 포함되어 있다는 것 입니다. 개발을 용이하게하기 위해 C #에서 해당 클래스를 생성하고 싶지만 파일에 많은 정보가 포함되어 있고 파일이 수십 개이므로 이러한 클래스를 수동으로 생성하고 싶지는 않습니다.

그래서 다음 중 하나를 허용하는 도구를 찾고 있습니다.

  • JSON 스키마에서 C # 클래스를 생성하려면.
  • JSON 스키마를 XSD 파일로 변환합니다. 그러면 XSD에서 클래스를 생성하는 도구가 많기 때문에 클래스를 쉽게 생성 할 수 있습니다.

JSON 스키마에 대해 JSON 문자열의 유효성을 검사하거나 JSON 문자열에서 클래스를 생성하는 많은 도구를 찾았지만 도움이되지 않는 것 같습니다.
JSON.NET 하지만 도서관이 아닌 도구가 될 것으로 보인다 나는 그것으로 클래스를 생성하는 방법에 대한 정보를 발견하지 않았다.

따라서 누군가 도구를 알고 있거나 해당 클래스를 생성 할 수있는 방법에 대한 아이디어가있는 경우 (Java로 클래스를 생성하는 도구를 시도했지만 작동하지 못했습니다).


너겟에서이 라이브러리를 찾아보세요. NJsonSchema.CodeGeneration는 JSON 스키마에서 C # 또는 타이프 라이터 코드를 생성 할 수 있습니다 :

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

이제 파일 변수에는 JSON 스키마에 정의 된 모든 클래스에 대한 C # 코드가 포함됩니다.

오늘 생성 된 클래스가 필요했지만 json 스키마를 C # 클래스로 온라인으로 변환 할 수있는 사이트를 찾을 수 없었기 때문에 위에서 언급 한 라이브러리를 사용하고 http://json2csharp.rohitl.com/ 빠르게 무언가를 작성했습니다 .


Visual Studio 2017에는이 기능이 있습니다.

메뉴에서 편집, 선택하여 붙여 넣기, 클래스로 JSON 붙여 넣기를 선택합니다. JSON 및 Visual Studio를 붙여 넣으면 필요한 클래스가 생성됩니다.

여기에 이미지 설명 입력


라이브러리 NJsonSchema사용하여 JSON 스키마를 읽거나 유형에서 하나를 생성하고 여기에서 C # 클래스를 생성 할 수 있습니다.

이러한 작업에 GUI가 필요한 경우 NSwag 도구 에서 NSwagStudio GUI를 사용해 볼 수 있습니다 ... (NJsonSchema 기반이기도합니다)


그래서 나는 나를 허용하는 도구를 찾고 있습니다 : JSON 스키마에서 C # 클래스를 생성하려면 ...

나는 그것을 직접 사용하지 않았기 때문에 그것에 대해 너무 많이 언급 할 수는 없지만 " json-schema-to-poco "도구가 당신이 필요로하는 것에 맞는 것 같습니다.

github readme에 따라 :

JSON 스키마 파일을 C #의 일반 이전 CLR 개체로 변환합니다. 자동화 된 빌드 프로세스의 일부로 실행하는 데 유용합니다.


이 질문에 올바르게 답하려면 Json 스키마에있는 버전 (초안)을 알아야합니다.

어떤 라이브러리가 어떤 스키마를 처리 할 수 ​​있는지 예 (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

으로 NJsonSchema.CodeGeneration당신이 실제 보낼 수 없습니다 json직접 하나의를 먼저 필요 (: 당신은 종종 오류가 발생합니다 실제 스키마로 변환하는 Unable to cast object of type 'System.String' to type 'NJsonSchema.JsonSchema4기타).

실행중인 코드의 예, Schemas프로젝트 루트에있는 폴더 :

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();
    }
}

나는 오늘 이것을 필요로했고 당신의 질문에 대한 확실한 답을 보지 못했기 때문에 이것을 채찍질했습니다. 완벽하지는 않지만 구축하기에 좋은 출발점입니다.

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


Json.NET의 도움말보기 유용 할 수있는 Json.Schema 네임 스페이스가 있습니다.

http://james.newtonking.com/projects/json/help/

Json.NET-빠른 시작 및 API 문서 Newtonsoft.Json.Schema 네임 스페이스 네임 스페이스 ► Newtonsoft.Json.Schema

프로젝트 페이지 : http://json.codeplex.com/


다음은 과거에 JSON 데이터 샘플 세트에서 C # 클래스를 생성하기 위해 사용한 온라인 클래스 생성기입니다.

http://json2csharp.com/

참고 URL : https://stackoverflow.com/questions/6358745/generate-c-sharp-classes-from-json-schema

반응형