035. XmlSerialize

2021. 12. 17. 18:26·사소한 아이의 소소한 스킬/C#
반응형

오랜만에 남긴다.......

 

35번째..

 

xmlserialize...

 

xml은 정말 흔히 쓰이는 input/output 파일이다.

 

이 파일을 통해 parsing도 하고 넘겨주기도 하고...

 

그래서인지 xml에 대한 serializer는 굉장히 잘되어있는 편..

 

바로 코드 ㄱㄱ

 

그냥 viewmodel도 필요없이...

 

걍 코드 비하인드로 진행해보자.....(코드는 들어가있으나..없어도 무관)

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<Window x:Class="TestProject.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:dock="http://schemas.xceed.com/wpf/xaml/avalondock"
        xmlns:dockctrl="clr-namespace:Xceed.Wpf.AvalonDock.Controls;assembly=Xceed.Wpf.AvalonDock"
        xmlns:local="clr-namespace:TestProject"
        xmlns:LocalViewModel="clr-namespace:TestProject.ViewModels"
        xmlns:LocalModel="clr-namespace:TestProject.Models"
        mc:Ignorable="d"
        Title="MainWindow" Height="500" Width="650">
    <Window.DataContext>
        <LocalViewModel:MainViewModel/>
    </Window.DataContext>
 
    <Grid >
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
 
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
 
        <Grid Grid.ColumnSpan="2" Grid.Row="0">
            <TextBox x:Name="tb"/>
        </Grid>
        <Button Grid.Column="0" Grid.Row="1" Content="Export" Click="Button_Click"/>
        <Button Grid.Column="1" Grid.Row="1" Content="Import" Click="Button_Click_1"/>
    </Grid>
</Window>
 
Colored by Color Scripter
cs

 

단순 텍스트 박스 1개에 버튼 2개...

 

코드비하인드는

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
using System;
using System.IO;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using System.Xml.Serialization;
 
using TestProject.Models;
 
namespace TestProject
{
    /// <summary>
    /// MainWindow.xaml에 대한 상호 작용 논리
    /// </summary>    
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
 
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            Car c = new Car("AVANTE", CAR_TYPE.GASOLINE, 2000);
 
            //파일에 출력하는 예
            using (StreamWriter wr = new StreamWriter(@"C:\Temp\CAR.xml"))
            {
                XmlSerializer xs = new XmlSerializer(typeof(Car));
                xs.Serialize(wr, c);
            }
 
            tb.Text = c.ToString();
        }
 
        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            using (var reader = new StreamReader(@"C:\Temp\CAR.xml"))
            {
                XmlSerializer xs = new XmlSerializer(typeof(Car));
                Car c = (Car)xs.Deserialize(reader);
 
                tb.Text = c.ToString();
            }
        }
    }
}
Colored by Color Scripter
cs

 

단순 버튼 2개에 대한 이벤트 핸들러만 존재하고..

 

각 버튼을 눌렀을때 xmlSerializer를 통해서 xml을 생성/파싱 하는 부분이다.

 

Car라는 모델정보는 아래와 같다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace TestProject.Models
{
 
    public enum CAR_TYPE
    {
        GASOLINE = 0,
        DIESEL = 1,
        ELECTONIC = 2
    }
 
    public class Car
    {
        public Car()
        {
 
        }
 
        public Car(string _name, CAR_TYPE _TYPE, int _price)
        {
            CARNAME = _name;
            CARTYPE = _TYPE;
            CARPRICE = _price;
        }
 
        private string _car_name;
 
        public string CARNAME
        {
            get { return _car_name; }
            set { _car_name = value; }
        }
 
        private CAR_TYPE _car_type;
        public CAR_TYPE CARTYPE
        {
            get { return _car_type; }
            set { _car_type = value; }
        }
 
        private int _car_price;
        public int CARPRICE
        {
            get { return _car_price; }
            set { _car_price = value; }
        }
 
        public override string ToString()
        {
            return CARNAME + "-" + CARTYPE + "-" + CARPRICE;
        }
    }
}
 
Colored by Color Scripter
cs

 

어렵지않은 모델..

 

해당 프로젝트를 실행해보면

 

 

이렇게 뜨고 

 

Export 시 C:\Temp폴더에 xml파일을 생성

 

Import 시 C:\Temp폴더에 생성된 xml파일을 읽어오는 기능을 수행한다.

 

Export 시

Import 시

 

데이터가 다르지 않아서 뭐 똑같은 이미지로 보이는데....

 

xml은 너무나 흔한 파일포맷이라 검색만 해도 금방데이터가 나온다...

 

어렵지 않다!!

반응형
저작자표시 비영리 변경금지 (새창열림)
'사소한 아이의 소소한 스킬/C#' 카테고리의 다른 글
  • 037. Partial Class
  • 036. Find Window
  • 034. Drag & Drop
  • 33. ToString Format
JOOJI
JOOJI
그냥 혼자좋아하는 것들 남기는 블로그....
  • JOOJI
    사소한프로그래머의 소소한행복
    JOOJI
  • 전체
    오늘
    어제
    • 분류 전체보기 (952) N
      • 사소한 아이의 소소한 일상 (245)
      • 사소한 아이의 소소한 먹거리 (43)
      • 사소한 아이의 소소한 정보 (75) N
      • 사소한 아이의 소소한 감사 (4)
      • 사소한 아이의 소소한 운동 (54) N
      • 사소한 아이의 소소한 여행 (40)
        • 2013_전주 (1)
        • 2014_독일 (13)
        • 2014_군산 (1)
        • 2015_제주도 (3)
        • 2015_서울모토쇼 (3)
        • 2015_진해 (1)
        • 2015_전주 (1)
        • 2016_여수 (1)
        • 2020_강릉 (1)
        • 2022_제주도 (4)
      • 사소한 아이의 소소한 강짱 (22)
        • 하트투하트 (10)
        • MAPS (1)
        • 화려한 유혹 (2)
        • 한여름의 추억 (2)
      • 사소한 아이의 TV (50)
        • Drama (9)
        • 예능 (32)
        • 사소한 아이의 다현 (9)
      • 사소한 아이의 소소한 스킬 (130)
        • Scaleform (2)
        • C# (74)
        • QT (3)
        • 알고리즘 (4)
        • Python (21)
        • PyQT5 (9)
        • C_C++ (2)
      • 사소한 아이의 소소한 축구 (283)
        • Korea (25)
        • Germany (45)
        • Bayern Munich (64)
        • Soccer_ETC (75)
        • Euro 2016 (12)
        • 친선경기 (3)
      • 사소한 아이의 소소한 생활정보 (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
    • 관리
  • 링크

    • 독일여행
    • 레바티스토리
    • 프라치노 공간
    • 남성패션꿀템 블로그
  • 공지사항

  • 인기 글

  • 태그

    바이에른 뮌헨
    WPF
    문제
    c#
    러닝
    분데스리가
    회사밥
    뮌헨
    python
    독일
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
JOOJI
035. XmlSerialize
상단으로

티스토리툴바