Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DataContractSerializer未序列化集合中自定义对象的所有属性_C#_Datacontractserializer - Fatal编程技术网

C# DataContractSerializer未序列化集合中自定义对象的所有属性

C# DataContractSerializer未序列化集合中自定义对象的所有属性,c#,datacontractserializer,C#,Datacontractserializer,我有以下课程: [Serializable] [DataContract(Name = "LayerInfo", Namespace = "ems.gis")] public abstract class LayerPersistInfo { public LayerPersistInfo() { } public LayerPersistInfo(int index, MappingContextBase context) { Ind

我有以下课程:

[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> 
{

}
[可序列化]
[DataContract(Name=“LayerInfo”,Namespace=“ems.gis”)]
公共抽象类LayerPersistInfo
{ 
公共层PersistInfo(){}
公共层PersistInfo(int索引,MappingContextBase上下文)
{
指数=指数;
上下文=上下文;
}
[DataMember(Name=“idx”,Order=0)]
公共int索引{get;set;}
//[数据成员(Name=“Name”)]
//公共字符串名称{get;set;}
[DataMember(EmitDefaultValue=true,Name=“ctx”,Order=1)]
公共映射ContextBase上下文{get;set;}
[DataMember(EmitDefaultValue=false,Name=“lyrs”,Order=2)]
公共层PersistInfo子项{get;set;}
公共抽象TocItemModel GetLayerModel();
}
[可序列化]
[CollectionDataContract(Name=“lyrs”,Namespace=“ems.gis”,ItemName=“lyr”)]
公共类层PersistInfo:列表
{
}
抽象LayerPersistInfo类的具体实现的多个实例最终出现在LayerPersistInfo中,我需要对其进行序列化。我观察到的东西很奇怪

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

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

我在调用序列化程序实例上的WriteObject之前设置了一个断点,并且这些属性从不为null。我可能做错了什么


TIA.

我的错。数据反序列化后未正确使用上下文属性。

我的错误。数据反序列化后未正确使用上下文属性