序列化数据并不总是输出到文件

时间:2015-07-15 10:23:57

标签: c# serialization

我有一系列从内部SQLite数据库收集数据的类。典型的一个看起来像这样

public class foo
{
    [AutoIncrement, XmlIgnore, PrimaryKey]
    public int tid {get; private set;}

    [XmlIgnore]
    public string barID {get;set;}

    public string someData {get;set;}

    [Ignore]
    public List<bar> Bar {private set{}; get {return myApp.Singleton.DBManager.GetListOfObjects<bar>("id", barID); }}
}

public class bar
{
     [AutoIncrement, PrimaryKey, XmlIgnore]
     public int tid {get;private set;}

     public string id {get;set;}

     [XmlIgnore]
     public string barTwoID {get;set;}

     public bool isSet {get;set;}

     [Ignore]
     public barTwo BarTwo {private set{}; get {return myApp.Singleton.DBManager.GetSingleObject<barTwo>("id", barTwoID);}}
 }

(你明白了)

我在应用程序期间填写了类,在保存到文件之前,当我在调试器中查看foo时,所有数据都出现了(我的意思是,bar和barTwo正确填充)。

我将foo传递给我的序列化程序,但是当我检查输出文件时,无法保证我之前看到的所有数据都在输出文件中。

我的序列化器看起来像这样

static BackgroundWorker bgWorker = new BackgroundWorker();

    public static void CreateSchema<T>(T schema, string id, string type, bool dump = false) where T:IDatabase, new()
    {
        try
        {
            bgWorker.DoWork += async (object sender, DoWorkEventArgs e) =>
            {
                var emptyNs = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
                var filename = Path.Combine(TechApp2.Singleton.ContentDirectory, 
                                       string.Format("{0}-{1}.xml", typeof(job).ToString(), id));
                var serializer = new XmlSerializer(typeof(T));
                using (var writer = new StreamWriter(filename))
                    serializer.Serialize(writer, schema, emptyNs);

                await Torrent.CopyAndMove(filename, dump);
                await SendEmail.SendEmailOut(filename, type, id);
            };
            bgWorker.RunWorkerAsync();

        }
        catch (Exception ex)
        {
            Console.WriteLine("Exception thrown - {0}:{1}", ex.Message, ex.InnerException);
        }
    }

T schema(在这种情况下)是foo - 它被设计为几乎任何东西。

根据我的阅读,private set{}之类的List<bar> Bar{...}需要让序列化程序在序列化输出中显示这些链接类。我也读过这个作品,但并不总是最好的方法,但很少有人解释如何使它更健壮。

任何有关这方面的建议都会受到赞赏,因为它引起了我的争论,为什么有时一切都在那里(在文件中),有时它不是。

在课程之前添加[Serializable]似乎没有什么区别

0 个答案:

没有答案