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
类的实例,它不会被执行;它挂。有办法吗?
嗯,你的属性都是 - 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,但没有根本原因它不能工作)。