2010-07-06 23 views
0

我有一個將.NET對象序列化並反序列化爲XML的應用程序。雖然反序列化我收到以下錯誤:從SQL Server反序列化XML時出錯

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

的代碼片段,做了反序列化是:

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); 

我使用一個DataReader來從存儲過程中的結果。 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,在編輯器中按Ctrl-K選擇它。否則,XML將不會顯示出來,代碼看起來很糟糕。 – 2010-07-06 23:26:16

回答

0

我相信我可能已經找到了解決方案。由於SQL Server XML字段需要值類型的Unicode類型編碼,因此我嘗試使用StringReader而不是MemoryStream,並且迄今爲止工作情況良好。下面的StackOverflow後幫助,以及:

Using StringWriter for XML Serialization

1

這通常是編碼問題。我看到你將字符串轉換爲UTF16字節數組。你有沒有檢查過,應該不是UTF8呢?我會給它一個去看看它是什麼。基本上,解串器可能正在尋找不同的編碼。

+0

你好, 最初我默認使用UTF-8編碼,但不得不切換到Unicode/UTF-16,因爲我得到的錯誤: 「XML解析:行1,字符38,無法切換編碼「 切換到Unicode允許我將序列化的對象寫入SQL服務器數據庫。 – fjxx 2010-07-07 14:33:16

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

謝謝約翰 - 我試過這個,現在我得到的錯誤: 「XML文檔(1,1)有錯誤。」 「根級數據無效,第1行,第1位」。 – fjxx 2010-07-07 14:11:20