C# 反序列化一个对象中的多个XML元素
我正在使用XmlSeriazlier对xml文件进行反序列化C# 反序列化一个对象中的多个XML元素,c#,xml,serialization,xmlreader,C#,Xml,Serialization,Xmlreader,我正在使用XmlSeriazlier对xml文件进行反序列化 var serializer = new XmlSerializer(typeof(T)); using (var reader = document.CreateReader()) var result = (T)serializer.Deserialize(reader); Xml包含需要一起存储在一个对象中的if/else if/else条件 示例Xml <Layers> <If if="somet
var serializer = new XmlSerializer(typeof(T));
using (var reader = document.CreateReader())
var result = (T)serializer.Deserialize(reader);
Xml包含需要一起存储在一个对象中的if/else if/else条件
示例Xml
<Layers>
<If if="something" >
<Layer name="something" />
</If>
<ElseIf if="anything" >
<Layer name="anything" />
</ElseIf>
<Else>
<Layer name="nothing" />
</Else>
<If if="something" >
<Layer name="something" />
</If>
<ElseIf if="anything" >
<Layer name="anything" />
</ElseIf>
<If if="something" >
<Layer name="something" />
</If>
<Else>
<Layer name="nothing" />
</Else>
</Layers>
语法与编程语言相同。我想知道如何将连接的条件存储在一起
[XmlRoot("Layers")
public class Layers
{
// TODO: Parse conditions to this list.
public List<Condition> { get; set; }
}
public class Condition
{
public If IfCondition { get; set; }
public List<IfElse> IfElseConditions { get; set; }
public Else ElseCondition { get; set; }
}
[XmlRoot(“层”)
公共类层
{
//TODO:将条件解析到此列表。
公共列表{get;set;}
}
公共阶级状况
{
如果条件{get;set;}为公共
公共列表IfElseConditions{get;set;}
公共Else ElseCondition{get;set;}
}
选择xml模式存在一些重大问题,这使得它不是XmlSerializer
的好选择。具体来说,没有概念上的
(或类似),这意味着从序列化程序的角度来看,没有任何东西可以对这些条件进行分组。要捕获数据,您需要:
[XmlRoot(“层”)
公共类层
{
[XmlElement(“如果”)]
public List{get;set;}//您可以在此处共享内部类型
[xmlement(“ElseIf”)]
公共列表{get;set;}
[XmlElement(“Else”)]
公共列表{get;set;}
}
但是现在你不知道哪个if元素和哪个else if元素一起,也不知道和哪个else元素一起
我怀疑您必须手动实现这一点,在节点类型之间更改时添加您自己的逻辑,但这并不简单。坦率地说,如果可能的话,重新考虑xml布局可能会更容易!例如:
选择xml模式存在一些重大问题,这使得它不是
XmlSerializer
的好选择。具体来说,没有概念上的
(或类似),这意味着从序列化程序的角度来看,没有任何东西可以对这些条件进行分组。要捕获数据,您需要:
[XmlRoot(“层”)
公共类层
{
[XmlElement(“如果”)]
public List{get;set;}//您可以在此处共享内部类型
[xmlement(“ElseIf”)]
公共列表{get;set;}
[XmlElement(“Else”)]
公共列表{get;set;}
}
但是现在你不知道哪个if元素和哪个else if元素一起,也不知道和哪个else元素一起
我怀疑您必须手动实现这一点,在节点类型之间更改时添加您自己的逻辑,但这并不简单。坦率地说,如果可能的话,重新考虑xml布局可能会更容易!例如: