XmlSerializer를 이용해서 개체를 저장하는 방식을 자주 사용하는데, 갑자기 desirialize를 위한 parsing이 제대로 되지 않는 issue를 접하게 되었습니다.
파일이 손상되었는 지, 다른 logic이 변경되었는 지를 열심히 확인하였지만... 그런 건 없었구요. (내 반나절... ㅜㅠ)
문제의 원인은 UTF8로 encoding한 xml파일의 앞쪽에 BOM(Byte Order Mark)가 포함되어 있는 것이 었습니다.
Paser에서 '<'가 아닌 다른 character를 만나니 read를 할 수 없고, 결국 desirialize도 할 수 없게 된 거죠.
이를 해결하기 위해서는 file을 StreamReader로 읽으면 됩니다.
(StreamReader로 읽는 이유는 decoding을 하기 위함입니다.)
Example code
References
BOM(Byte Order Mark): 유니코드에서 엔디안을 구별하기 위해 사용되는 문자로, 문자 값은 U_FEFF이다.
'Programming > XML' 카테고리의 다른 글
Export excel file via Asp.NET MVC, using OpenXml (0) | 2015.09.08 |
---|---|
XML vs. Json comparison (0) | 2014.07.22 |
How to handling MS excel file (0) | 2014.07.22 |
XML Element vs. Attribute (1) | 2014.06.30 |