c#中的序列化

本文关键字:序列化 | 更新日期: 2023-09-27 18:06:18

我对序列化有疑问。

的例子:

interface IBase {}
[DataContract]
class Base : IBase
{
  [DataContract]
  public Derived Child{get;set;}
}
[DataContract]
[KnownType(typeof(Base))]
class Derived : Base
{
  [DataMember]
  public IBase Parrent {get;set;}
}

如果我试图在IsolatedStorage中存储Base类的实例,它不会被执行;它挂。有办法吗?

c#中的序列化

嗯,你的属性都是 - Base.Child[DataMember],而不是[DataContract]。电话7中的IIRC需要公共类型进行序列化;需要通知的是。然而;IBase是另一个问题;这不是合同。如果可能的话,将其更改为Base(而不是IBase),因为序列化程序需要知道所有具体的契约。

:

public interface IBase {}
[DataContract]
[KnownType(typeof(Derived))]
public class Base : IBase
{
    [DataMember]
    public Derived Child{get;set;}
}
[DataContract]
public class Derived : Base
{
    [DataMember]
    public Base Parent {get;set;}
}

此外,Parent成员对于树序列化器来说是一个大问题(DataContractSerializer 一个树序列化器,除非您显式启用全图模式)。

可能能够让DCS喜欢IBase,但您需要调查将其标记为合同并注意具体类型。如果你不能得到任何地方,我知道protobuf-net支持这种布局(虽然我还没有测试特别为phone 7,但没有根本原因它不能工作)。