C# 从xml继承/实现列表/ICollection/e.t.c反序列化类型
我有这样的类层次结构,我想从XML反序列化这些类。此层次结构将通过“OrCondition:ConditionToWork”e.t.c.扩展,因此解决方案必须是可扩展的C# 从xml继承/实现列表/ICollection/e.t.c反序列化类型,c#,.net,xml,xml-deserialization,C#,.net,Xml,Xml Deserialization,我有这样的类层次结构,我想从XML反序列化这些类。此层次结构将通过“OrCondition:ConditionToWork”e.t.c.扩展,因此解决方案必须是可扩展的 public abstract class ConditionToWork { } [XmlType(nameof(WorkerMethodCondition))] public class WorkerMethodCondition : ConditionToWork { [XmlAttribute(nameof(W
public abstract class ConditionToWork { }
[XmlType(nameof(WorkerMethodCondition))]
public class WorkerMethodCondition : ConditionToWork
{
[XmlAttribute(nameof(WorkerMethodName))]
public string WorkerMethodName { get; set; };
}
[XmlType("And")]
public class AndCondition : List<ConditionToWork>{}
以及我要反序列化的XML:
...
<Worker>
<Conditions>
<WorkerMethodCondition/>
<WorkerMethodCondition/>
<WorkerMethodCondition/>
<And>
<WorkerMethodCondition/>
</And>
</Conditions>
</Worker>
...
如何正确反序列化“和”节点?请尝试以下操作:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XmlReader reader = XmlReader.Create(FILENAME);
XmlSerializer serializer = new XmlSerializer(typeof(Worker));
Worker worker = (Worker)serializer.Deserialize(reader);
}
}
public class Worker
{
public Conditions Conditions { get; set; }
}
public class Conditions
{
[XmlElement()]
public List<string> WorkerMethodCondition { get; set; }
public And And { get; set; }
}
public class And
{
public string WorkerMethodCondition { get; set; }
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Xml;
使用System.Xml.Serialization;
命名空间控制台应用程序1
{
班级计划
{
常量字符串文件名=@“c:\temp\test.xml”;
静态void Main(字符串[]参数)
{
XmlReader=XmlReader.Create(文件名);
XmlSerializer serializer=新的XmlSerializer(typeof(Worker));
工作者=(工作者)序列化程序。反序列化(读取器);
}
}
公社工人
{
公共条件{get;set;}
}
公共阶级条件
{
[XmlElement()]
公共列表工作方法条件{get;set;}
公共和{get;set;}
}
公共类和
{
公共字符串WorkerMethodCondition{get;set;}
}
}
尝试以下操作:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XmlReader reader = XmlReader.Create(FILENAME);
XmlSerializer serializer = new XmlSerializer(typeof(Worker));
Worker worker = (Worker)serializer.Deserialize(reader);
}
}
public class Worker
{
public Conditions Conditions { get; set; }
}
public class Conditions
{
[XmlElement()]
public List<string> WorkerMethodCondition { get; set; }
public And And { get; set; }
}
public class And
{
public string WorkerMethodCondition { get; set; }
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Xml;
使用System.Xml.Serialization;
命名空间控制台应用程序1
{
班级计划
{
常量字符串文件名=@“c:\temp\test.xml”;
静态void Main(字符串[]参数)
{
XmlReader=XmlReader.Create(文件名);
XmlSerializer serializer=新的XmlSerializer(typeof(Worker));
工作者=(工作者)序列化程序。反序列化(读取器);
}
}
公社工人
{
公共条件{get;set;}
}
公共阶级条件
{
[XmlElement()]
公共列表工作方法条件{get;set;}
公共和{get;set;}
}
公共类和
{
公共字符串WorkerMethodCondition{get;set;}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XmlReader reader = XmlReader.Create(FILENAME);
XmlSerializer serializer = new XmlSerializer(typeof(Worker));
Worker worker = (Worker)serializer.Deserialize(reader);
}
}
public class Worker
{
public Conditions Conditions { get; set; }
}
public class Conditions
{
[XmlElement()]
public List<string> WorkerMethodCondition { get; set; }
public And And { get; set; }
}
public class And
{
public string WorkerMethodCondition { get; set; }
}
}