c# - 我如何以交替顺序订购两个不同对象列表的 XMLArray 项?
问题描述
我有类类型,它有两个不同对象类型的列表。当我尝试序列化类类型时,我按顺序获取列表,但我想以交替顺序获取项目列表。
public class Type
{
private List<Slow> slowField;
private List<Fast> FastField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("SLOW", Order=1)]
public List<Slow> SLOW
{
get
{
return this.slowField;
}
set
{
this.slowField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("FAST", Order=2)]
public List<Fast> FAST
{
get
{
return this.FastField;
}
set
{
this.FastField = value;
}
}
}
电流输出:
<Type>
<SLOW>S1</SLOW>
<SLOW>S2</SLOW>
<SLOW>S3</SLOW>
<FAST>F1</FAST>
<FAST>F2</FAST>
<FAST>F3</FAST>
</Type>
我需要这个输出:
<Type>
<SLOW>S1</SLOW>
<FAST>F1</FAST>
<SLOW>S2</SLOW>
<FAST>F2</FAST>
<SLOW>S3</SLOW>
<FAST>F3</FAST>
</Type>
解决方案
一种方法是引入第三个集合,它将按所需顺序组合两个现有集合。例如,
假设Fast和Slow的结构如下
public class Fast
{
public int Value{get;set;}
}
public class Slow
{
public int Value{get;set;}
}
您现在可以为这两种类型引入一个基类(或使用 System.Object 作为公共基础)。例如,
public class Base{}
public class Fast:Base
{
public int Value{get;set;}
}
public class Slow:Base
{
public int Value{get;set;}
}
现在您可以在您的类型类中添加第三个集合,如下所示
[XmlElement("SLOW", Type = typeof(Slow))]
[XmlElement("FAST", Type = typeof(Fast))]
public List<Base> Complete => GetMergedList();
private List<Base> GetMergedList()
{
int minLen = Math.Min(SLOW.Count, FAST.Count);
var list = SLOW.Take(minLen)
.Zip(FAST.Take(minLen), (a, b) => new Base[] { a, b })
.SelectMany(array => array)
.Concat(SLOW.Skip(minLen))
.Concat(FAST.Skip(minLen));
return list.ToList();
}
请注意,代码假定 Fast 和 Slow 集合已经单独排序,但如果没有,则需要添加对它们进行排序的逻辑。
您还需要标记现有属性以XmlIgnoreAttribute
在序列化期间跳过它们。
[XmlIgnore]
public List<Slow> SLOW
{
....
}
[XmlIgnore]
public List<Fast> SLOW
{
....
}
现在您可以序列化 Type 实例以获得所需的结果。
推荐阅读
- python - Python Click:如何实现类似于`--help`的帮助命令?
- spring-mvc - InternalResourceViewResolver 和 UrlBasedViewResolver 之间的确切区别是什么
- c# - 未管理的内存结构
- node.js - 错误:中间件中的 passport.initialize() 未使用
- r - 如何从总和为 1 的指数分布生成随机数(概率)
- python - 为什么我的 DNA 模式 Python 代码没有给出正确的输出?
- php - 跳过使用 PHP 将 csv 上传到 mysql 的第一行
- django - 在 django-filter 页面启动时显示所有记录
- mongodb - 从嵌套数组聚合、查找和 addField
- node.js - 我如何将规范化的 json 数据插入 mongod