1. 직렬화, XML 저장하기, XML 불러오기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | public void OpenProjectFile(string fpath) { if (File.Exists(fpath)) { try { using (var sr = new StreamReader(fpath)) { var xs = new XmlSerializer(typeof(MyProjectInfo)); var prj = (MyProjectInfo)xs.Deserialize(sr); this.project.Set(prj); } } catch (Exception ex) { Console.WriteLine(ex); MessageBox.Show("프로젝트 파일 로딩 실패 : " + fpath); } } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 | public void SaveProjectFile(string fpath) { var ns = new XmlSerializerNamespaces(); ns.Add(string.Empty, string.Empty); var xs = new XmlSerializer(typeof(MyProjectInfo)); using (var sw = new StreamWriter(fpath)) { var info = new MyProjectInfo(this.project); xs.Serialize(sw, info, ns); } } | cs |
2. 속성 값 부여
(이렇게 객체나 메소드 선언 위 줄에 대괄호를 입력하는 것을 사용자 지정 특성(Attribute)이라고 한단다. )
- element, array, array item 비교 <코드>
1 2 3 4 5 6 7 8 9 10 11 | [XmlRoot("MyProject")] public class MyProjectInfo { [XmlElement("Name")] public string Name { get; set; } [XmlArray("ImageList")] [XmlArrayItem("Image")] public List<MyImage> imgList { get; set; } ///...중략 } | cs |
- Ignore , attribute 비교 <코드>
1 2 3 4 5 6 7 8 9 10 11 | public class MyImage { [XmlAttribute("Name")] public string Name { get; set; } // 영상명 [XmlIgnore] public string Path { get; set; } // 저장 경로 [XmlAttribute("Using")] public bool Using { get; set; } // 사용 여부 //...중략 } | cs |
프로퍼티에 [XmlIgnore] 가 붙은 것은 직렬화하지 않는다.
위 코드의 <결과.xml>
1 2 3 4 5 6 7 8 9 | <?xml version="1.0" encoding="utf-8"?> <MyProject> <Name>LM-15-07-01.lmp</Name> <ImageList> <Image Name="E2_05.JPG" Using="true" /> <Image Name="E2_06.JPG" Using="true" /> <Image Name="High_Quality_Image_right.tif" Using="true" /> </ImageList> </MyProject> | cs < |
- Attribute 의 종류와 활용 ('결과.xml'과 비교하며 읽어보기)
'MyProject' 라는 Root Node 아래에 Element Node의 이름은 'Name','ImageList' 이다. : [XmlElement]
'ImageList' 라는 Array 아래에 Item의 이름은 'Image'이다. : [XmlArray] [XmlArrayItem]
'Image' 라는 Node의 속성(Attribute)의 이름은 'Name' 과 'Using' 이다 : [XmlAttribute]
'컴퓨터 > C#' 카테고리의 다른 글
[C#] TypeLoadException 예외 해결 방법 (0) | 2015.08.31 |
---|---|
[C#] Text 파일 줄 단위 읽기, 쓰기 (System.IO.File) (0) | 2015.08.31 |
[C#] Stream.Read 메서드에 관하여.. (1) | 2015.06.26 |
[C#] C#에서 C++ DLL 사용하기 (1) | 2015.06.15 |
[C#] string to DateTime (0) | 2015.02.26 |