【问题标题】:C# custom serialization of a class with list of interfaces具有接口列表的类的 C# 自定义序列化
【发布时间】:2017-03-28 17:41:43
【问题描述】:

我正在尝试找到一种方法来序列化和反序列化下面构建的 ClassToSerialize:

    [Serializable]
    public interface IFoo
    {
    }

    [Serializable]
    public class BaseFoo : IFoo
    {
    }
    [Serializable]
    public class Foo1 : BaseFoo
    {
        public string Foo1_Member1 { get; set; }
        public int Foo1_Member2 { get; set; }
    }
    [Serializable]
    public class Foo2 : BaseFoo
    {
        public IList<IFoo> Foo2_Member3 { get; set; }
        public string Foo2_Member4 { get; set; }
    }
    [Serializable]
    public class ClassToSerialize
    {
        public string Class_Member1;
        public IFoo Foo;
    }

该类将被传递给 API,并且在反序列化时,Foo1 和 Foo2 的实例需要重新构建并放入“Foo”属性中,并沿着链向下放入 IList 或类似对象中。

我已经被这个问题困扰了一天左右,我没有想法!

【问题讨论】:

  • 你能提供你尝试过的事情的例子吗?
  • 您使用什么技术/库来序列化您的课程?我没有看到任何常见的属性,例如 [Serializable][DataContract]。我知道 DataContractSerializer 有 KnownTypes 来处理这个问题,但是如果你不使用 DataContractSerializer,那对你没有多大好处。
  • 我已经尝试了从实现 XML 属性到自定义实现 ISerializable 的所有方法。但是,我希望找到一个经过验证的方向来集中精力。
  • @Joe - 我希望使用本机 .NET 代码来完成此任务。我最新的方法是在Foo1Foo2 上实现ISerializable。这是最好的方法吗?想想看,这将是 API 的[DataContract]
  • 你能序列化被声明为接口类型的东西吗?您不能实例化 IFoo

标签: c# serialization deserialization iserializable


【解决方案1】:

对于其他试图完成类似事情的人:我最终在BaseFooFoo1Foo2ClassToSerialize 上实现了ISerializable

我在接口中添加了一个FooType Type 字段,并在基类上实现了它。

在实现中,我首先反序列化为BaseFoo,然后根据类型再次反序列化为Foo1Foo2

我很想听听更好的方法。

【讨论】:

    猜你喜欢
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 2018-03-09
    • 1970-01-01
    相关资源
    最近更新 更多