繁体   English   中英

使用DataContract Collection反序列化 <Class> 派生类

[英]Deserializing with DataContract Collection<Class> to derived Class

标题有点令人困惑,希望有人可能知道我的问题更合适。

我正在尝试创建一个从Collection<Classname>派生的类,以实现一种简单的方法来保存和加载配置文件。 写入文件没有问题,但是我无法实现解串功能。 我不确定如何将反序列化的内容分配回我的实例。

当前方法:

[DataContract(Name = "Configurations", Namespace = "")]
public class Configurations : Collection<Configuration>
{
    internal void SerializeToBinaryFile(string path)
    {
        Helper.DumpObjectToBinaryFile(this, path);
    }

    internal void DeserializeFromBinaryFile(string path)
    {
       // Getting Error:
       // This expression can not be used as an assignment target
       this = Helper.GetObjectFromBinaryFile<Collection<Configuration>>(path);
    }
}

我对this.Add([Configuration])很熟悉,但这仅是插入一个项目的机会。 我考虑过foreach(Configuration c in temporaryObject使用foreach(Configuration c in temporaryObject并逐一添加它们,但这不是最佳解决方案。

感谢您的提示!

编辑1:

我添加了foreach迭代以添加配置

    internal void DeserializeFromBinaryFile(string path)
    {
        foreach (var c in Helper.GetObjectFromBinaryFile<Collection<Configuration>>(path))
        {
            Add(c);
        }
    }

这似乎很好。 有人知道更好的模式吗?

无论您要进行反序列化还是其他操作,都不能将新的类实例分配给“ this”。 下面的代码仅使用新的构造函数,也不起作用。 基本上,那时您在内存中确实有两个不同的类实例。

public class Point
{
    public int X { get; set; }
    public int Y { get; set; }

    public void CreatePoint(int x, int y)
    {
        // Doesn't work either
        this = new Point();
    }
}

您必须在类的主体之外执行此操作,因此要使用静态反序列化方法:

[DataContract(Name = "Configurations", Namespace = "")]
public class Configurations : Collection<Configuration>
{
    internal void SerializeToBinaryFile(string path)
    {
        Helper.DumpObjectToBinaryFile(this, path);
    }

    internal static Configurations DeserializeFromBinaryFile(string path)
    {
        return Helper.GetObjectFromBinaryFile<Collection<Configuration>>(path);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM