【发布时间】:2013-08-07 20:47:12
【问题描述】:
我正在做一个小型的概念验证项目,其中客户端以byte[] 格式发送图像文件,服务器将数据插入到Image 列中的数据库中,即VarBinary(MAX)。这部分工作正常,但是,我在尝试将数据转换回字节数组并将其发送到客户端时遇到问题。
在数据库中,有一个存储过程负责获取数据并以 XML 形式返回:
SELECT
...
asset.Image AS 'Image'
FROM ASSETS AS asset
WHERE asset.Id = @Id
FOR XML PATH('Asset')
示例查询结果如下所示(Image 的实际值实际上比这长得多,但我将其缩短以使其更具可读性):
<Asset>
...
<Image>/9j/4AAQSkZJRgABAQEAYABgAAD/2wB</Image>
</Asset>
在代码中,我有一个通用方法,可以将此 XML 反序列化为相应的对象:
internal static T ExecuteQuery<T>(StoredProcedures storedProcedure, ParameterList parameters)
{
using (var connection = GetSqlConnection())
{
using (var command = new SqlCommand(storedProcedure.ToString(), connection))
{
command.CommandType = System.Data.CommandType.StoredProcedure;
foreach (var parameter in parameters)
{
command.Parameters.Add(new SqlParameter(parameter.Key.ToString(), parameter.Value));
}
connection.Open();
var data = command.ExecuteScalar();
return DeserializeXml<T>(data.ToString());
}
}
Asset 类型(我将它传递给这个泛型方法的类型有几个属性,其中之一是Image:
public class Asset
{
public Asset()
{
}
...
[DataMember]
[XmlElement("Image")]
public byte[] Image { get; set; }
}
现在当我执行程序时,我得到这个错误:
There is an error in XML document
似乎反序列化器的 VarBinary 值存在问题(在我添加此 Image 属性之前它曾经正常工作)。任何想法为什么会发生这种情况?我需要使用内存流将数据转换回来吗?
【问题讨论】:
标签: c# xml sql-server-2008 bytearray xml-deserialization