Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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序列化程序,以帮助XML文档转换为对象_C#_Xml_Serialization_Xml Serialization - Fatal编程技术网

在c#中创建自定义XML序列化程序,以帮助XML文档转换为对象

在c#中创建自定义XML序列化程序,以帮助XML文档转换为对象,c#,xml,serialization,xml-serialization,C#,Xml,Serialization,Xml Serialization,我的xml格式如下所述:- <JobRunnerPluginStaus PluginName="JobRun"> <JobstepStatus> <JobStatus StepNumber="1" StepStatus="Done"/> <JobStatus StepNumber="2" StepStatus="Started" />

我的xml格式如下所述:-

<JobRunnerPluginStaus PluginName="JobRun">                        
  <JobstepStatus>
    <JobStatus StepNumber="1" StepStatus="Done"/>
    <JobStatus StepNumber="2" StepStatus="Started" />                     
  </JobstepStatus>
</JobRunnerPluginStaus>

我想使用泛型和反射将其转换为以下类对象

我想将属性转换为简单类型(PluginName),将嵌套属性转换为列表对象(JobstepStatus)

公共类JobRunnerPluginStaus
{
公共列表JobstepStatus{get;set;}
公共字符串PluginName{get;set;}
}
公营职位
{
公共整数步数{get;set;}
公共字符串状态{get;set;}
}
我主要使用以下网站: 替我干脏活

下面是您的类层次结构的外观:

[XmlRoot(ElementName="JobStatus")]
    public class JobStatus {
        [XmlAttribute(AttributeName="StepNumber")]
        public string StepNumber { get; set; }
        [XmlAttribute(AttributeName="StepStatus")]
        public string StepStatus { get; set; }
    }

    [XmlRoot(ElementName="JobstepStatus")]
    public class JobstepStatus {
        [XmlElement(ElementName="JobStatus")]
        public List<JobStatus> JobStatus { get; set; }
    }

    [XmlRoot(ElementName="JobRunnerPluginStaus")]
    public class JobRunnerPluginStaus {
        [XmlElement(ElementName="JobstepStatus")]
        public JobstepStatus JobstepStatus { get; set; }
        [XmlAttribute(AttributeName="PluginName")]
        public string PluginName { get; set; }
    }
[XmlRoot(ElementName=“JobStatus”)]
公营职位{
[XmlAttribute(AttributeName=“步骤编号”)]
公共字符串步骤号{get;set;}
[XmlAttribute(AttributeName=“StepStatus”)]
公共字符串状态{get;set;}
}
[XmlRoot(ElementName=“JobstepStatus”)]
公营职业地位{
[xmlement(ElementName=“JobStatus”)]
公共列表作业状态{get;set;}
}
[XmlRoot(ElementName=“JobRunnerPluginStaus”)]
公共类JobRunnerPluginStaus{
[xmlement(ElementName=“JobstepStatus”)]
public JobstepStatus JobstepStatus{get;set;}
[XmlAttribute(AttributeName=“PluginName”)]
公共字符串PluginName{get;set;}
}

您有什么问题?你试了什么?具体在哪里?能否修改源代码中的类以附加xmlserializer属性?我不能这样做,这是针对现有应用程序的。它需要是一个可伸缩的助手类。我正在传递一个参数反序列化(字符串数据,类型typeName),其中数据是xml字符串,类型是JobRunnerPluginStaus。我正在从中提取IEnumerable子元素。如果没有属性,我正在尝试将Xlement节点映射到list type,并将属性映射到父节点下的simple type。@SudiptoSarkar您在提问时必须在问题中提及所有这些。您以后不能设置条件。您有解决问题的方法吗?您不需要在每个类上都使用
XmlRoot
,只需要在实际用作xml根的类上使用。无论如何,它不会痛。
[XmlRoot(ElementName="JobStatus")]
    public class JobStatus {
        [XmlAttribute(AttributeName="StepNumber")]
        public string StepNumber { get; set; }
        [XmlAttribute(AttributeName="StepStatus")]
        public string StepStatus { get; set; }
    }

    [XmlRoot(ElementName="JobstepStatus")]
    public class JobstepStatus {
        [XmlElement(ElementName="JobStatus")]
        public List<JobStatus> JobStatus { get; set; }
    }

    [XmlRoot(ElementName="JobRunnerPluginStaus")]
    public class JobRunnerPluginStaus {
        [XmlElement(ElementName="JobstepStatus")]
        public JobstepStatus JobstepStatus { get; set; }
        [XmlAttribute(AttributeName="PluginName")]
        public string PluginName { get; set; }
    }