2024. 9. 20. 20:43ㆍc#
C#에서 JSON, XML 데이터 처리
현대 애플리케이션에서 데이터를 저장하고 교환할 때 자주 사용하는 두 가지 대표적인 형식이 JSON과 XML입니다.
C#에서는 JSON과 XML 데이터를 쉽게 처리할 수 있는 다양한 방법을 제공합니다.
이번 포스팅에서는 C#에서 JSON 및 XML 데이터를 처리하는 방법을 살펴보겠습니다.
1. JSON 데이터 처리
JSON(자바스크립트 객체 표기법)은 데이터를 표현하는 가볍고 간단한 형식으로, 많은 웹 API와 애플리케이션에서 사용됩니다. C#에서는 Newtonsoft.Json 라이브러리 또는 .NET 내장 System.Text.Json 네임스페이스를 사용하여 JSON 데이터를 처리할 수 있습니다.
1.1. Newtonsoft.Json을 사용한 JSON 처리
Newtonsoft.Json은 C#에서 가장 널리 사용되는 JSON 처리 라이브러리입니다.
JSON 직렬화(객체 -> JSON)
using Newtonsoft.Json;
class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main(string[] args)
{
Person person = new Person { Name = "Alice", Age = 30 };
// 객체를 JSON 문자열로 변환
string json = JsonConvert.SerializeObject(person);
Console.WriteLine(json);
}
}
위 예제는 Person 객체를 JSON 문자열로 변환(직렬화)하는 코드입니다. 출력은 다음과 같습니다:
{"Name":"Alice","Age":30}
JSON 역직렬화(JSON -> 객체)
using Newtonsoft.Json;
class Program
{
static void Main(string[] args)
{
string json = "{\"Name\":\"Alice\",\"Age\":30}";
// JSON 문자열을 객체로 변환(역직렬화)
Person person = JsonConvert.DeserializeObject<Person>(json);
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}
}
위 코드는 JSON 문자열을 C# 객체로 변환하는 예시입니다.
1.2. System.Text.Json을 사용한 JSON 처리
.NET Core 3.0 이상에서는 System.Text.Json 네임스페이스를 통해 내장된 JSON 처리 도구를 사용할 수 있습니다.
JSON 직렬화
using System.Text.Json;
class Program
{
static void Main(string[] args)
{
Person person = new Person { Name = "Bob", Age = 25 };
// 객체를 JSON 문자열로 변환
string json = JsonSerializer.Serialize(person);
Console.WriteLine(json);
}
}
JSON 역직렬화
using System.Text.Json;
class Program
{
static void Main(string[] args)
{
string json = "{\"Name\":\"Bob\",\"Age\":25}";
// JSON 문자열을 객체로 변환
Person person = JsonSerializer.Deserialize<Person>(json);
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}
}
2. XML 데이터 처리
XML(확장 마크업 언어)은 데이터 교환 및 저장에 많이 사용되는 형식입니다.
C#에서는 System.Xml 네임스페이스를 사용하여 XML을 처리할 수 있으며, XmlDocument 또는 XDocument 클래스를 활용할 수 있습니다.
2.1. XmlDocument를 사용한 XML 처리
XML 생성
using System;
using System.Xml;
class Program
{
static void Main(string[] args)
{
XmlDocument doc = new XmlDocument();
// 루트 요소 생성
XmlElement root = doc.CreateElement("Person");
doc.AppendChild(root);
// 하위 요소 생성
XmlElement name = doc.CreateElement("Name");
name.InnerText = "Charlie";
root.AppendChild(name);
XmlElement age = doc.CreateElement("Age");
age.InnerText = "40";
root.AppendChild(age);
// XML 출력
doc.Save(Console.Out);
}
}
위 코드는 Person XML 문서를 생성하여 출력하는 예시입니다.
XML 읽기
using System;
using System.Xml;
class Program
{
static void Main(string[] args)
{
XmlDocument doc = new XmlDocument();
doc.Load("person.xml");
XmlNodeList nameNodes = doc.GetElementsByTagName("Name");
foreach (XmlNode node in nameNodes)
{
Console.WriteLine("Name: " + node.InnerText);
}
XmlNodeList ageNodes = doc.GetElementsByTagName("Age");
foreach (XmlNode node in ageNodes)
{
Console.WriteLine("Age: " + node.InnerText);
}
}
}
위 코드는 XML 파일에서 Name과 Age 요소를 읽어오는 예시입니다.
2.2. XDocument를 사용한 XML 처리
XDocument 클래스는 XML을 LINQ 형식으로 처리할 수 있게 도와줍니다.
이는 XML을 더 직관적이고 편리하게 다룰 수 있게 해줍니다.
XML 생성
using System;
using System.Xml.Linq;
class Program
{
static void Main(string[] args)
{
XDocument doc = new XDocument(
new XElement("Person",
new XElement("Name", "David"),
new XElement("Age", 35)
)
);
// XML 출력
Console.WriteLine(doc);
}
}
XML 읽기
using System;
using System.Linq;
using System.Xml.Linq;
class Program
{
static void Main(string[] args)
{
XDocument doc = XDocument.Load("person.xml");
var name = doc.Descendants("Name").First().Value;
var age = doc.Descendants("Age").First().Value;
Console.WriteLine($"Name: {name}, Age: {age}");
}
}
3. JSON vs XML: 언제 사용해야 할까?
JSON:
- 경량 데이터 형식
- 주로 웹 API, 모바일 앱과 같은 응용 프로그램에서 사용
- 간단한 데이터 구조 처리에 적합
XML:
- 복잡한 데이터 구조와 메타데이터를 표현 가능
- 문서 중심의 데이터 처리에 유리
- 많은 기존 시스템과의 호환성 보장
C#에서 JSON과 XML 데이터를 처리하는 방법은 각각의 라이브러리와 클래스에 따라 다릅니다.
Newtonsoft.Json과 System.Text.Json을 통해 JSON을 손쉽게 처리할 수 있으며, XmlDocument와 XDocument를 사용해 XML 데이터를 생성하고 읽어올 수 있습니다.
데이터의 형태와 요구 사항에 맞는 형식을 선택하여 효과적으로 데이터를 처리할 수 있습니다.
'c#' 카테고리의 다른 글
c# 델리게이트(delegate)의 개념과 사용법 (0) | 2024.09.25 |
---|---|
c# 람다(Lambda) 표현식 (0) | 2024.09.25 |
c# 파일 입출력의 파일 읽기 및 쓰기 or 파일과 디렉터리 관리(StreamReader, StreamWriter) (0) | 2024.09.20 |
c# try-catch, finally, throw (0) | 2024.09.18 |
c# 인터페이스(interface)와 추상 클래스(abstract)의 차이점 (1) | 2024.09.18 |