0

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

4

1 回答 1

0

您可能想看看如何将 XML 保存到数据库中。如果字节顺序标记与 XML 一起保存到数据库中,则XML 反序列化将失败(通常是这种情况,具体取决于您的操作方式)。

在将 XML 数据保存到数据库时,请参阅有关如何消除字节顺序标记的类似问题。

于 2013-08-07T21:03:48.153 回答