XML을 Couchbase Server에 로드할 수 있는 JSON 데이터로 변환하기 의 경우 약간의 .NET. 데이터의 출처에 따라 다음과 같은 도구를 사용할 수 있습니다. Talend. 그러나 다음과 같이 간단한 C# .NET 응용 프로그램을 작성할 수도 있습니다. 뉴턴소프트의 Json.NET 를 클릭합니다. 이 글에서는 Json.NET을 사용하여 C#에서 XML을 JSON으로 변환하는 방법을 보여드리겠습니다.
카우치베이스 서버를 사용하지 않나요? 문제없습니다. 이것은 매우 일반적인 예시입니다. 하지만 솔루션의 중심에 JSON을 사용하는 모든 기능을 갖춘 데이터베이스를 사용하면 인덱싱, 쿼리, 검색, 분석, 모바일 지원이 모두 기본 제공되고 액세스할 수 있다는 이점을 생각해 보세요. .NET SDK. 더 보기 기술 백서의 장점 또는 카우치베이스 다운로드 를 클릭하고 이 게시물을 팔로우하세요.
XML 데이터
이 튜토리얼에서는 매우 간단한 XML 예제를 사용하겠습니다. XML이 더 복잡하다면(예: 여러 속성) 접근 방식도 더 복잡해야 할 것입니다. (Json.NET은 모든 XML에서 Json으로의 변환을 처리할 수 있지만, 특정 세트의 전환 규칙). 다음은 데이터 샘플입니다:
|
1 2 3 4 5 6 |
var xml = @" <Invoice> <Timestamp>1/1/2017 00:01</Timestamp> <CustNumber>12345</CustNumber> <AcctNumber>54321</AcctNumber> </Invoice>"; |
이 XML이 C#에 하드코딩된 문자열로 되어 있는 것을 볼 수 있습니다. 실제 상황에서는 데이터베이스, REST API, XML 파일 등에서 XML을 가져올 가능성이 높습니다.
원시 XML을 확보한 후에는 XmlDocument 객체 (XmlDocument 에 살고 있습니다. System.Xml 네임스페이스).
|
1 2 |
XmlDocument doc = new XmlDocument(); doc.LoadXml(xml); |
Json.NET으로 변환
일단 XmlDocument 객체를 사용하는 경우 Json.NET을 사용하여 해당 객체를 Json 표현으로 변환할 수 있습니다.
|
1 |
var json = JsonConvert.SerializeXmlNode(doc, Formatting.None, true); |
이 예제에서는 Json.NET에 XML 노드를 직렬화하도록 요청하고 있습니다:
- 사용
Formatting.None. 실제 Json을 표시하려면 다음을 사용하는 것이 좋습니다.서식.들여쓰기 - 마지막
true는 루트 객체를 생략할 것을 지정합니다. 위의 XML에서는 다음과 같이 생각할 수 있습니다.인보이스>를 루트 객체로 지정합니다. 저는 Invoice 객체의 값만 원합니다. 루트 노드를 생략하지 않았다면 결과 Json은 다음과 같이 보일 것입니다:{"Invoice":{"Timestamp":"1/1/2017 00:01","CustNumber":"12345","AcctNumber":"54321"}}
Json 결과 저장
마지막으로, Json을 Couchbase에 넣어 보겠습니다. 이를 수행하는 가장 쉬운 방법은 다시 한 번 JsonConvert 를 사용하여 Json을 C#로 역직렬화합니다. 객체. 그런 다음 해당 객체는 Couchbase의 bucket.Insert(...) 메서드를 사용합니다.
|
1 2 |
object transactObject1 = JsonConvert.DeserializeObject(json); bucket.Insert(Guid.NewGuid().ToString(), transactObject1); |
이 방법을 사용하면 Json은 다음과 같이 Couchbase에 저장됩니다:

이 방법도 괜찮을 수도 있지만, 형식을 더 많이 제어하고 싶을 때가 많습니다. Json.NET을 사용하면 지정된 클래스로 직렬화할 수 있습니다. 객체. 를 만들어 보겠습니다. 인보이스 클래스처럼:
|
1 2 3 4 5 6 |
public class Invoice { public DateTime Timestamp { get; set; } public string CustNumber { get; set; } public int AcctNumber { get; set; } } |
이제 몇 가지 유형 정보가 있음을 알 수 있습니다. 타임스탬프는 날짜/시간 이고, AcctNumber는 int. 변환은 계속 작동하지만 결과는 다음과 같이 달라집니다. Json.NET의 전환 규칙. (또한 Json.NET 전체 문서 아직 익숙하지 않다면).
|
1 2 |
Invoice transactObject2 = JsonConvert.DeserializeObject<Invoice>(json); bucket.Insert(Guid.NewGuid().ToString(), transactObject2); |
삽입 결과는 다음과 같습니다:

- 타임스탬프 필드가 좀 더 표준화된 방식으로 저장된다는 점에 주목하세요.
- acctNumber 필드 값은 따옴표로 묶여 있지 않아 숫자로 저장되고 있음을 나타냅니다.
- 마지막으로 필드 이름이 다르다는 것을 알 수 있습니다. 이는 Json.NET이 기본적으로 Json 필드 이름을 지정하는 방식 때문입니다. 다른 이름을 지정하려면
제이슨 프로퍼티속성입니다.
그게 다입니다.
한 가지 더 사소한 점을 지적하고 싶습니다: 저는 Guid.NewGuid().ToString() 를 사용하여 문서에 대한 임의의 키를 만들 수 있습니다. XML 데이터에 키로 사용하려는 값이 있는 경우 해당 값을 대신 사용할 수 있으며 사용해야 합니다.
이 블로그 게시물은 Couchbase 사용자와의 이메일 대화에서 영감을 얻어 작성되었습니다. XML을 JSON으로 변환하는 과정을 더 쉽게 하기 위한 도구, 팁 또는 요령에 대한 제안이 있으시면 알려주세요. 또는 제가 블로그에 포스팅하고 싶은 내용이 있으면 연락주세요! 다음 연락처로 이메일 보내기 또는 트위터 @mgroves에 문의.
계속 학습하기
-
- 읽기: 최신 애플리케이션을 위한 10가지 일반적인 NoSQL 사용 사례
- 다운로드: 카우치베이스 서버 또는 카펠라 DBaaS 무료 체험판 받기
- 시청하기 오라클에서 카우치베이스로 마이그레이션 YouTube 동영상
- 더 레지스터의 경력 개발 패널 토론 보기 개발자가 변화에 적응하는 세 가지 방법