我试图将xml文件序列化为数据库中的二进制文件。我不确定我是否以正确的方式编写代码。我一直在玩,但找不到答案。我可能错过了一些东西。我认为这一定是个小问题。
我希望结果在这里:
<TestFiles>
<XmlFile>test001.xml </XmlFile>
<XmlFile>test002.xml </XmlFile>
<XmlFile>test003.xml </XmlFile>
</TestFiles>
我在数据库中收到错误结果:
<?xml version="1.0"?>
<ArrayO
我的代码可能出现什么问题?
C#:
[Serializable]
[XmlRoot("XmlFile")]
public class XmlFile
{
public string FileName
{
get;
set;
}
}
[Serializable]
public class TestFiles: List<XmlFile>
{
}
public void SerializeXmlFileToDatabase()
{
var files = new TestFiles
{
new XmlFile {FileName = "test001.xml"},
new XmlFile {FileName = "test002.xml"},
new XmlFile {FileName = "test003.xml"},
};
var ser = new XmlSerializer(typeof (TestFiles));
var ms = new MemoryStream(8096);
ser.Serialize(ms, XmlFile);
DbConnection connection = null;
try
{
connection = DbFactory.CreateConnection();
connection.ConnectionString = ConnectionString;
connection.Open();
using (DbCommand command = connection.CreateCommand())
{
//insert
var id = Guid.NewGuid();
command.CommandText = "insert into testtable ([id], [data]) values (@id, @data)";
command.CommandType = CommandType.Text;
command.AddParameter("id", DbType.Guid, id);
byte[] data = ms.GetBuffer();
command.AddParameter("data", DbType.Binary, data, ParameterDirection.Input, data.Length);
command.Prepare();
command.ExecuteNonQuery();
}
}
finally
{
if (connection != null)
connection.Close();
}
}
答案 0 :(得分:1)
很难理解你在这里要做什么。你说你正在尝试序列化为二进制,但你已经使用了XML Serializer。
如果要将XML存储在数据库中,只需将其存储为XML。
如果由于某种原因,您确实需要将XML存储为二进制文件,那么您需要使用二进制序列化程序,并将包含XML的对象传递给它。
using (MemoryStream stream = new MemoryStream())
{
BinaryFormatter BF = new BinaryFormatter();
BF.Serialize(stream, objectToSerialize);
stream.Flush();
stream.Position = 0;
// Do stuff with your stream
}
但是真的问自己 - 为什么我要将XML存储为二进制文件?