반응형
오랜만에 남긴다.......
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>
|
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();
}
}
}
}
|
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;
}
}
}
|
cs |
어렵지않은 모델..
해당 프로젝트를 실행해보면
이렇게 뜨고
Export 시 C:\Temp폴더에 xml파일을 생성
Import 시 C:\Temp폴더에 생성된 xml파일을 읽어오는 기능을 수행한다.
Export 시 |
Import 시 |
데이터가 다르지 않아서 뭐 똑같은 이미지로 보이는데....
xml은 너무나 흔한 파일포맷이라 검색만 해도 금방데이터가 나온다...
어렵지 않다!!
반응형