성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Roll A Lisp In C - Reading ; https...
[정성태] Java - How to use the Foreign Funct...
[정성태] 제가 큰 실수를 했군요. ^^; Delegate를 통한 Bein...
[정성태] Working with Rust Libraries from C#...
[정성태] Detecting blocking calls using asyn...
[정성태] 아쉽게도, 커뮤니티는 아니고 개인 블로그입니다. ^^
[정성태] 질문이 잘 이해가 안 됩니다. 우선, 해당 소스코드에서 ILis...
[양승조
] var대신 dinamic으로 선언해서 해결은 했습니다. 맞는 해...
[양승조
] 또 막혔습니다. ㅠㅠ var list = props[i].Ge...
[양승조
] 아. 감사합니다. 어제는 안됐던것 같은데....정신을 차려야겠네...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
닷넷
.NET 3.0
.NET 3.5
.NET 4.0
VC++
개발 환경 구성
제품 소개
VS.NET IDE
Vista
Windows 7
Windows 8
Windows 서버
Team Foundation Server
IIS
디버깅 기술
Win32
64비트
오피스
웹
기타
Phone
부모글 보이기/감추기
내용
<div style='display: inline'> <br /> <div class='mainCenterTitle'>System.Drawing.Color 구조체 직렬화 방법</div><br /> <br /> 얼마 전, Color 구조체를 포함한 특정 클래스의 값들이 당연히 직렬화 될 거라고 믿고 진행하는 도중 뜻하지 않게 만났던 문제였습니다. 해당 직렬화를 담당했던 래퍼 메서드가 제가 만든 것이어서, 처음에는 래퍼 메서드에 오류가 있다는 식으로 보고가 들어온 것입니다.<br /> <br /> 그럴 수밖에 없었던 것이, 아래의 정의를 보시면 아시겠지만 Color는 표면상으로 볼때, 직렬화에 전혀 문제가 없어보이기 때문입니다.<br /> <br /> <pre class='code'> [<b>SerializableAttribute</b>] [TypeConverterAttribute(typeof(ColorConverter))] public struct Color </pre> <br /> 검색을 해보니, 일단은 직렬화가 안되는 것이 당연했습니다.<br /> <br /> <pre class='code'> Topic: XmlSerializer does not serialize Color ; <a target='_tab' href='http://www.forum.miraplacid.com/topic.pl?topic_id=183'>http://www.forum.miraplacid.com/topic.pl?topic_id=183</a> </pre> <br /> Color의 RGB 정의가 각각 다음과 같이 read-only 속성이었기 때문입니다. <br /> <br /> <pre class='code'> public byte R { get; } public byte G { get; } public byte B { get; } </pre> <br /> 오호... 왜? 읽기 전용 속성으로 된 것일까요? 잠시 고민해 보았지만, 그렇게 만든 의도에 대해서는 전혀 이해가 되질 않았습니다. 뭐, 아무렴 어떻습니까! 지금 중요한 것은 해당 속성들이 Read-only라는 것이니. 그렇다면, Color 속성에 대해서는 별도 속성 또는 문자열 등의 방법을 통해서 직렬화해야 해야 할 것 같습니다.<br /> <br /> 혹시나 싶어서, 이를 위한 좀 더 매끄러운 해결책이 없을까 싶어 좀 더 검색을 해보았는데, 그나마 가장 적절한 해법을 제시해 주는 다음의 토픽을 발견할 수 있었습니다. <br /> <br /> <pre class='code'> System.Drawing.Color serialization ; <a target='_tab' href='http://devintelligence.com/blogs/netadventures/archive/2005/11/28/1124.aspx'>http://devintelligence.com/blogs/netadventures/archive/2005/11/28/1124.aspx</a> </pre> <br /> 간단하니, 아래에 코드를 실어봅니다.<br /> <br /> <pre class='code'> using System; using System.Drawing; using System.Xml.Serialization; [Serializable] public class Person { private Color _HairColor = Color.Empty; public Person() { } <b>[XmlIgnoreAttribute()]</b> public Color <b>HairColor</b> { get { return _HairColor; } set { _HairColor = value; } } <b>[XmlElement("HairColor")]</b> public string <b>HairColorHtml</b> { get { return ColorTranslator.ToHtml(_HairColor); } set { _HairColor = ColorTranslator.FromHtml( value ); } } } </pre> <br /> 썩 마음에 들진 않지만, 그런대로 해결이 될 것 같습니다. 그런데, 다시 한번 궁금해집니다. 왜 R,G,B 속성을 Read-only로만 해두었을까요?<br /> <br /><br /><hr /><span style='color: Maroon'>[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
7417
(왼쪽의 숫자를 입력해야 합니다.)