从SQL Server反序列化XML时出错

时间:2010-07-06 23:22:41

标签: c# .net xml xml-serialization serialization

我有一个将.NET对象序列化和反序列化为XML的应用程序。在反序列化时,我收到以下错误:

  

“XML中存在错误   文件(1,2)名称不能以。开头   '。'字符,十六进制值   0×00。第1行,第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>
....

我花了无数个小时试图找出错误意味着什么,但无济于事。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

这通常是编码问题。我看到你将字符串转换为UTF16字节数组。您是否检查过不应该是UTF8?我会放手一搏,看看它是什么来的。基本上,反序列化器可能正在寻找不同的编码。

答案 1 :(得分: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);
    }
}

答案 2 :(得分:0)

我相信我可能已经找到了解决方法。由于SQL Server XML字段需要Unicode类型的值编码,我尝试使用StringReader而不是MemoryStream,到目前为止工作正常。以下StackOverFlow帖子也有帮助:

Using StringWriter for XML Serialization