2010-05-17 72 views
1

,我有以下类中的自定义对象的所有属性:抽象LayerPersistInfo类具体实现的DataContractSerializer的序列化不收集

[Serializable] 
[DataContract(Name = "LayerInfo", Namespace = "ems.gis")] 
public abstract class LayerPersistInfo 
{ 
    public LayerPersistInfo() { }  
    public LayerPersistInfo(int index, MappingContextBase context) 
    { 
     Index = index; 
     Context = context; 
    } 

    [DataMember(Name="idx", Order=0)] 
    public int Index { get; set; } 

    //[DataMember(Name = "name")] 
    //public string Name { get; set; } 

    [DataMember(EmitDefaultValue = true, Name="ctx", Order=1)] 
    public MappingContextBase Context { get; set; } 

    [DataMember(EmitDefaultValue = false, Name="lyrs", Order=2)] 
    public LayersPersistInfo Children { get; set; }  

    public abstract TocItemModel GetLayerModel(); 

} 

[Serializable] 
[CollectionDataContract(Name = "lyrs", Namespace = "ems.gis", ItemName = "lyr")] 
public class LayersPersistInfo : List<LayerPersistInfo> 
{ 

} 

多个实例LayersPersistInfo我需要序列结束。我所观察到的很奇怪。

如果LayersPersistInfo具有2个或更多子项,则索引0处元素的每个子元素的Context属性为null。在重新填充集合之后的下一次序列化尝试中,LayersPersistInfo的索引1处的元素的每个子元素的Context属性为null。在下一次尝试中,项目0的子项都有空上下文等等。这种行为非常一致。

如果我的自定义集合LayersPersistInfo只有一个项目,则所有子项都会正确序列化。

在串行器实例上调用WriteObject之前,我已经放了一个断点,并且这些属性从不为空。我可能在这里做错了什么?

TIA。

回答

1

我的错。数据反序列化后没有正确使用Context属性。

+0

然后接受这个答案。 ;) – dss539 2010-05-17 20:01:38

相关问题