将XML形式的SQL varbinary反序列化为C#字节[]
我正在做一个小型的概念验证项目,在这个项目中,客户机以将XML形式的SQL varbinary反序列化为C#字节[],c#,xml,sql-server-2008,bytearray,xml-deserialization,C#,Xml,Sql Server 2008,Bytearray,Xml Deserialization,我正在做一个小型的概念验证项目,在这个项目中,客户机以字节[]格式发送一个图像文件,服务器将数据插入图像列中的数据库,即VarBinary(MAX)。这部分工作正常,但是,我在尝试将数据转换回字节数组并发送到客户端时遇到问题 数据库中有一个存储过程,负责获取数据并以XML格式返回: SELECT ... asset.Image AS 'Image' FROM ASSETS AS asset WHERE asset.Id = @Id FOR XML PATH('Asset')
字节[]
格式发送一个图像文件,服务器将数据插入图像
列中的数据库,即VarBinary(MAX)
。这部分工作正常,但是,我在尝试将数据转换回字节数组并发送到客户端时遇到问题
数据库中有一个存储过程,负责获取数据并以XML格式返回:
SELECT
...
asset.Image AS 'Image'
FROM ASSETS AS asset
WHERE asset.Id = @Id
FOR XML PATH('Asset')
示例查询结果如下所示(图像的实际值实际上比这个长很多,但我缩短了它以使其更具可读性):
现在,当我执行程序时,我得到以下错误:
There is an error in XML document
反序列化程序似乎在
VarBinary
值方面有问题(在我添加此Image
属性之前,它工作正常)。你知道为什么会这样吗?是否需要使用内存流将数据转换回?您可能需要了解如何将XML保存到数据库中。如果将XML与XML一起保存到数据库中,则XML反序列化将失败(通常情况下,这取决于您的操作方式)
请参阅如何在将XML数据保存到数据库时消除字节顺序标记。我不是将XML保存到数据库,我只是从数据库返回一个XML。看看我的存储过程,我意识到了这一点,但在某个时候XML被插入到了数据库中。如果它与BOM一起插入,您在尝试检索它时会遇到问题。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());
}
}
public class Asset
{
public Asset()
{
}
...
[DataMember]
[XmlElement("Image")]
public byte[] Image { get; set; }
}
There is an error in XML document