与序列化写入数据库的xml文件作斗争

时间:2013-08-22 15:11:58

标签: c# sql xml-serialization

我试图将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();
        }

}

1 个答案:

答案 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存储为二进制文件?