din*_*esh 3 c# windows-phone-7
我对序列化有疑问.
例:
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;}
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试存储Base类的实例IsolatedStorage,它就不会被执行; 它挂了.有没有办法做到这一点?
嗯,你的属性到处都是 - Base.Child是一个[DataMember],而不是一个[DataContract].在电话7中的IIRC,您需要公共类型进行序列化; 它是需要通知儿童的基地.然而; 这是另一个问题; 这不是指定为合同.如果可能,将其更改为(不),因为序列化程序需要了解所有具体合同.IBaseBaseIBase
所以:
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;}
}
Run Code Online (Sandbox Code Playgroud)
此外,Parent成员是树序列化程序的一个大问题(并且DataContractSerializer 是树序列化程序,除非您明确启用全图模式).
您或许可以让DCS喜欢IBase,但您需要调查将其标记为合同并注明具体类型.如果你无法在任何地方获得,我知道protobuf-net支持这种布局(虽然我没有专门为手机7 测试过,但没有根本原因它无法工作).
| 归档时间: |
|
| 查看次数: |
577 次 |
| 最近记录: |