VB.NET+JSON.NET+InterSystems Cache'에서 JSON→클래스→DB 생성(ODB)까지 단번에 자동화
1. VB.NET에는 JSON 파일에서 클래스 구조를 코드 생성하는 기능이 있습니다.
2. JSON.NET을 사용하면 JSON 파일에서 클래스 구조를 반영하는 객체를 동적으로 만들 수 있습니다.
3. eXTreme 기술은 VB.NET의 클래스 구조를 Cache'DB에 자동으로 반영하여 테이블을 생성합니다.
이들을 결합하면 무슨 일이 일어나는가 :
"프로그래머가 테이블의 필드를 전혀 모르더라도 올바른 테이블 구조를 (게다가 객체적으로) 해석하고, 클래스를 생성해 취급해, 인스턴스의 동적 생성, 데이터 보존까지 자동화할 수 있다"라고 하는 것이 가능하게 됩니다.
이 기능 중 무엇이 훌륭합니까?
옛날 전이라면 : 소켓 통신으로 「접속 사양서를 보내주세요」라고 말해, 종이를 받고, 같은 오브젝트 구조를 손으로 입력해, 그리고 O/R 매핑을 생각, 라고 하는 단계를 생략할 수 있습니다.
최근이라면 : 벤더간에 "JSON 형식으로 데이터를 받고 싶습니다"라는 요청에 대해 "연결 사양서를 보내주세요"라고 말하고 종이를 받고 JSON.NET에서 클래스까지는 생성하지만 , O/R 매핑이 결국 필요하고 곤란해 버리는, 라고 하는 시츄에이션을 해소할 수 있습니다.
Vb.NET 측 준비;
프로젝트를 새로 생성하고 프로젝트 → NuGet 패키지 관리를 엽니다. Neutonsoft.Json을 검색하고 안정 버전을 설치합니다.
과거에 설치한 적이 있다면 프로젝트 → 참조 추가에서 어셈블리에서 JSON.NET을 찾아 체크하는 방법도 OK.
프로젝트 → 참조 추가로,
InterSystems.Data.CacheClient.dll
InterSystems.Data.CacheExtreme.dll 추가.
(장소는 이미지를 참고로)
VB.NET에서 추가 → 신규 항목으로, JSON 구조를 기술하는 클래스 파일(여기서는 TestJSON.vb)을 작성한다.
가져오고 싶은 JSON 파일(여기서는 C:\data\test.json으로 한)을 메모장 등에서 열고 전체 선택 → 복사하고 TestJSON.vb의 편집 화면에서 편집 → JSON을 클래스로 붙여 넣으면 구조 가 자동으로 클래스화됩니다.
test.json
{
"version": "1.0.0",
"contents": {
"package": {
"displayName": "Red テーマ",
"description": "Visual Studio Code の Red テーマ"
}
}
}
TestJSON.vb
Public Class Rootobject
Public Property version As String
Public Property contents As Contents
End Class
Public Class Contents
Public Property package As Package
End Class
Public Class Package
Public Property displayName As String
Public Property description As String
End Class
코어가 되는 코드는 다음과 같다.
한 클래스에서 eXTreme의 ImportSchema로 VB.NET을 DB 구조로 준비한다.
그 클래스 인스턴스에 JsonConvert.DeserializeObject(Of VBCacheJSONTest.Rootobject)를 이용해, JSON 파일을 JSON.NET로 읽어들여 형 변환한다.
그 데이터는 DB에 Store하는 것만으로 올바르게 저장된다.
또 클래스 인스턴스는 도트 구문으로 기술할 수 있으므로, 폴리모피즘도 자유자재이다.
VBJSONExtreme.vb
Imports InterSystems.XEP
Imports Newtonsoft.Json
Imports VBCacheJSONTest
Public Class VBJSONeXTreme
Sub testSub()
'Setup eXTreme
Dim namespc As String = "USER"
Dim username As String = "yourname"
Dim password As String = "yourpass"
Dim myPersister As EventPersister = PersisterFactory.CreatePersister()
myPersister.Connect(namespc, username, password)
'Dynamic Class Generation
Dim className As String = "VBCacheJSONTest.Rootobject"
myPersister.ImportSchema(className) 'Cache'側のClassも呼び出せるとのこと
Dim newEvent As InterSystems.XEP.Event = myPersister.GetEvent(className)
'Data Read From JSON File
Dim eventData As Rootobject
eventData = JsonConvert.DeserializeObject(Of VBCacheJSONTest.Rootobject)(File.ReadAllText("c:\data\Test.json"))'ここがStringで記述すれば、通信時のデータを直接(構造ごと)投げ込める
Dim str As String = eventData.version 'JSONをオブジェクト指向で使う方法
MsgBox(str)
'Save To Cache eXTreme
Dim itemIDs As Long = newEvent.Store(eventData)
myPersister.Close()
End Sub
End Class
폼 위에서의 호출은 다음과 같다.
Form1.vb
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim d As New VBJSONeXTreme()
d.testSub()
End Sub
Cache→관리 포털→시스템 익스플로러→SQL에서의 실행 결과는 다음과 같다. JSON 클래스 계층 구조가 테이블 이름으로 어떻게 반영되는지 주목합니다.
Reference
이 문제에 관하여(VB.NET+JSON.NET+InterSystems Cache'에서 JSON→클래스→DB 생성(ODB)까지 단번에 자동화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/torisan_/items/9725c62d1ae7b3877519텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)