我正在做一个小型概念验证项目,其中客户端以某种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
任何想法为什么会发生这种情况?我需要使用内存流将数据转换回来吗?