.NET:将对象序列化为事务环境

时间:2010-08-16 18:41:50

标签: c# .net serialization transactions

我需要一种在事务上下文中序列化对象的方法。

给出以下伪代码:

transation.Begin()
try{
    serializeObj(obj1);
    serializeObj(obj2);
    serializeObj(obj3);
}
catch(Exception){
    transaction.RollBack();
}
transaction.Commit();

我希望在此代码运行之后,或者所有对象都已被序列化,或者没有一个被序列化。

我不认为TransactionScpe给了我这种能力。 我更喜欢一些内置的.NET机制而不是一些外部库。

感谢。

2 个答案:

答案 0 :(得分:2)

如果您有事务性文件系统(transaction ntfs),我认为您可以通过thisblog中讨论的方法实现您的目标。另外alphafs可能值得一看(他们为事务ntfs写了一个托管包装器),但我不知道项目的状态。

答案 1 :(得分:0)

假设serializeObj(Object obj)专门序列化为文件:

List<string> FileNames = new List<string>();
try
{        
    serializeObj(obj1);
    //Add a method to determine the filename to which you wrote
    FileNames.Add(GetSerializedFileName(obj1)) 
    //repeat for all your objects
}
catch(Exception)
{
    Foreach(string fn in FileNames)
    {
        if(File.Exists(fn) File.Delete(fn);
    }
}

假设serializeObj(Object obj)之后只是简单地写入IO的内存流,那就更容易了:

List<Stream> Files = new List<Stream>();
try
{        
    Files.Add(serializeObj(obj1));
    //repeat for all your objects
}
catch(Exception)
{
    Foreach(Stream fn in Files)
    {
        fn.Dipose();
    }
}