0

我试图将 xml 文件序列化为数据库中的二进制文件。我不确定我以正确的方式编写代码。我一直在goolge,但找不到答案。我可能错过了什么。我相信这一定是一个小问题。

我期待这里的结果:

<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();
        }

}

4

1 回答 1

1

很难理解你在这里想要做什么。您说您正在尝试序列化为二进制文件,但您使用了 XML 序列化器。

如果要将 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 存储为二进制文件?

于 2013-08-22T15:57:45.430 回答