2010-07-06 5 views
0

.NET 객체를 XML로 직렬화 및 비 직렬화하는 응용 프로그램이 있습니다.SQL 서버에서 XML을 deserialize하는 동안 오류가 발생했습니다.

"There is an error in XML Document(1,2) Name cannot begin with the '.' character, hexadecimal value 0x00. Line 1, position 2. "

직렬화 복원을 수행하는 코드는 다음과 같습니다 : 내가 저장 프로 시저에서 결과 집합을 얻기 위해 DataReader를 사용하고

string xmlEntity = _loanReader["LoanEntity"].ToString(); 
XmlSerializer xs2 = new XmlSerializer(typeof(Model.Loan)); 
MemoryStream memoryStream2 = new MemoryStream(StringFunction.StringToUTF16ByteArray(xmlEntity)); 
XmlTextWriter xmlTextWriter2 = new XmlTextWriter(memoryStream2, Encoding.Unicode); 
_loan = (Model.Loan)xs2.Deserialize(memoryStream2); 

역 직렬화하는 동안 나는 다음과 같은 오류를 얻고있다. LoanEntity는 대출 테이블의 XML 유형 필드입니다.

분야에 저장된 XML의 조각 : 나는 오류가 아무 소용 것이 아니라 무엇을 의미하는지 알아 내려고 많은 시간을 보냈습니다

<Loan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<GUID>d2cc9dc3-45b0-44bd-b9d2-6ef5e7ddb54c</GUID><LoanNumber>DEV999999</LoanNumber> 
.... 

. 어떤 도움을 주시면 감사하겠습니다.

+0

은, 코드 나 XML 형식을 편집기를 눌러 제어-K에서 선택 할 수 있습니다. 그렇지 않으면 XML이 표시되지 않고 코드가 끔찍하게 보입니다. –

답변

0

나는 이것에 대한 해결책을 찾은 것 같습니다. SQL Server XML 필드에서는 유니 코드 형식의 값 인코딩이 필요하기 때문에 MemoryStream 대신 StringReader를 사용하여 시도해 보았습니다. 다음에 유래 게시물뿐만 아니라 도움 :

Using StringWriter for XML Serialization

1

이것은 일반적으로 인코딩 문제입니다. 문자열이 UTF16 바이트 배열로 변환 된 것을 확인합니다. UTF8이 아니어야한다는 것을 확인 했습니까? 나는 그것을 줄 것이고 그것이 오는 것을 볼 것이다. 기본적으로 디시리얼라이저는 다른 인코딩을 찾고있을 수 있습니다.

+0

안녕하세요, Tim 처음에는 기본적으로 UTF-8 인코딩을 사용하고 있었지만 오류가 발생했기 때문에 유니 코드/UTF-16으로 전환해야했습니다. "XML 파싱 : 줄 1, 문자 38, 인코딩을 전환 할 수 없습니다. " 유니 코드로 전환하면 직렬화 된 개체를 SQL 서버 데이터베이스에 쓸 수있었습니다. – fjxx

0

이전 예제와 나쁜 예제로 작업해야합니다. 사용해보기 :

string xmlEntity = _loanReader["LoanEntity"].ToString(); 
XmlSerializer xs2 = new XmlSerializer(typeof(Model.Loan)); 
using (MemoryStream memoryStream2 = new MemoryStream(StringFunction.StringToUTF16ByteArray(xmlEntity))) 
{ 
    XmlWriterSettings settings = new XmlWriterSettings { Encoding = Encoding.Unicode}; 
    using (XmlWriter writer = XmlWriter.Create(memoryStream2, settings)) 
    { 
     _loan = (Model.Loan)xs2.Deserialize(memoryStream2); 
    } 
} 
+0

감사합니다. John -이 시도했지만 이제 오류가 발생했습니다. "XML 문서 (1, 1)에 오류가 있습니다." "루트 수준의 데이터가 잘못되었습니다. 줄 1, 위치 1" – fjxx

관련 문제