Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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# 将XML嵌套列表反序列化为嵌套的ObservableCollection_C#_Xml_Observablecollection_Xml Deserialization - Fatal编程技术网

C# 将XML嵌套列表反序列化为嵌套的ObservableCollection

C# 将XML嵌套列表反序列化为嵌套的ObservableCollection,c#,xml,observablecollection,xml-deserialization,C#,Xml,Observablecollection,Xml Deserialization,我正在构建一个对象,该对象包含可观察集合中的可观察集合。反序列化下面的对象可以正确地创建CustomTab项的集合,但不能创建Task项 下面显示的代码生成零个任务项。如果我将代码更改为: [XmlElement("Tasks")] // was "Task" in original code public ObservableCollectionExtended<UtilitiesTask> TasksCollection CustomTabs.xsd <

我正在构建一个对象,该对象包含
可观察集合
中的
可观察集合
。反序列化下面的对象可以正确地创建
CustomTab
项的集合,但不能创建
Task

下面显示的代码生成零个
任务
项。如果我将代码更改为:

[XmlElement("Tasks")]          // was "Task" in original code
public ObservableCollectionExtended<UtilitiesTask> TasksCollection
CustomTabs.xsd

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified">
  <xs:element name="CustomTabsConfig" type="CustomTabsConfigType"/>

  <xs:complexType name="CustomTabsConfigType">
    <xs:sequence>
      <xs:element type="CustomTabType" name="CustomTab" maxOccurs="unbounded" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="CustomTabType">
    <xs:sequence>
      <xs:element type="xs:int" name="Header"/>
      <xs:element type="xs:string" name="TabVisibility"/>
      <xs:element type="TasksType" name="Tasks"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="TasksType">
    <xs:sequence>
      <xs:element type="TaskType" name="Task" maxOccurs="unbounded" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="TaskType">
    <xs:sequence>
      <xs:element type="xs:string" name="TaskName"/>
    </xs:sequence>
  </xs:complexType>

</xs:schema>

CustomTabsConfigModel.cs(为简洁起见编辑)

[XmlRoot(“CustomTabsConfig”)]
公共类CustomTabsConfigModel:ModelBase
{
私有配置读卡器配置读卡器;
/// 
///创建绑定到“CustomTabs.xml”的配置对象
///包含在[CommonApplicationData]\[Manufacturer]\[ProductName]中
/// 
公共自定义选项卡ConfigModel()
{
}
/// 
///创建绑定到指定文件名的配置对象
///包含在[CommonApplicationData]\[Manufacturer]\[ProductName]中
/// 
/// 
公共CustomTabsConfigModel(字符串文件名)
{
this.TabsFileName=文件名;
}
/// 
///自定义选项卡的集合
/// 
[XmlElement(“CustomTab”)]
公共ObservableCollection CustomTabsCollection{get;set;}
/// 
///从customtabs.xml文件加载选项卡信息
/// 
公共布尔加载配置(字符串customTabsFileName=“CustomTabs.xml”)
{
//加载选项卡文件
configReader=新的configReader(customTabsFileName);
//如果无法加载配置文件,则不要执行其他操作
if(configReader.Load())
{
//从CustomTabs.xml更新所有项目
CustomTabsCollection=configReader.Data.CustomTabsCollection;
}
其他的
{
Log.Write(LogLevel.Fatal,“配置文件加载失败”);
返回false;
}
返回true;
}
}
CustomTab.cs

    [XmlRoot("CustomTab")]
    public class CustomTab : ModelBase<CustomTab>
    {
        public CustomTab()
        {
            this.Header = "";
            this.TabVisibility = Visibility.Visible;
        }    

        [XmlElement("Header")]
        public String Header { get; set; }

        /// <summary>
        /// Sets the Visibility of the tab
        /// </summary>
        [XmlElement("TabVisibility")]
        public Visibility TabVisibility { get; set; }

        /// <summary>
        /// Collection of Tasks
        /// </summary>
        [XmlElement("Task")]
        public ObservableCollection<UtilitiesTask> TasksCollection { get; set; }

    }

    [XmlRoot("Task")]
    public class UtilitiesTask : ModelBase
    {
        public UtilitiesTask()
        {
            this.TaskName = "";
        }

        [XmlElement("TaskName")]
        public String TaskName { get; set; }            
    }
}
[XmlRoot(“CustomTab”)]
公共类CustomTab:ModelBase
{
公共自定义选项卡()
{
此.Header=“”;
this.TabVisibility=可见性.Visibility;
}    
[XmlElement(“标题”)]
公共字符串头{get;set;}
/// 
///设置选项卡的可见性
/// 
[XmlElement(“TabVisibility”)]
公共可见性选项卡可见性{get;set;}
/// 
///任务集合
/// 
[XmlElement(“任务”)]
公共ObservableCollection任务集合{get;set;}
}
[XmlRoot(“任务”)]
公共类实用程序任务:模型库
{
公共事业任务()
{
this.TaskName=“”;
}
[XmlElement(“任务名”)]
公共字符串TaskName{get;set;}
}
}

我通过如下方式更新
任务集合来解决此问题:

[XmlArray("Tasks")]
[XmlArrayItem("Task", typeof(UtilitiesTask))]
public ObservableCollection<UtilitiesTask> TaskCollection
[XmlArray(“任务”)]
[XmlArrayItem(“任务”,类型(实用程序任务))]
公共可观测集合任务集合

如果问题已解决,只需回答您自己的问题:)如果您已解决此问题,请将您的解决方案作为答案发布,并(现在或以后)接受该答案。有关发布您的解决方案,请参阅并正确发布。
    [XmlRoot("CustomTab")]
    public class CustomTab : ModelBase<CustomTab>
    {
        public CustomTab()
        {
            this.Header = "";
            this.TabVisibility = Visibility.Visible;
        }    

        [XmlElement("Header")]
        public String Header { get; set; }

        /// <summary>
        /// Sets the Visibility of the tab
        /// </summary>
        [XmlElement("TabVisibility")]
        public Visibility TabVisibility { get; set; }

        /// <summary>
        /// Collection of Tasks
        /// </summary>
        [XmlElement("Task")]
        public ObservableCollection<UtilitiesTask> TasksCollection { get; set; }

    }

    [XmlRoot("Task")]
    public class UtilitiesTask : ModelBase
    {
        public UtilitiesTask()
        {
            this.TaskName = "";
        }

        [XmlElement("TaskName")]
        public String TaskName { get; set; }            
    }
}
[XmlArray("Tasks")]
[XmlArrayItem("Task", typeof(UtilitiesTask))]
public ObservableCollection<UtilitiesTask> TaskCollection