【发布时间】:2014-10-03 10:56:16
【问题描述】:
我有下面的类,我需要使用 XML 序列化器对其进行序列化
我知道 XML 序列化器不喜欢接口
但是,我们的编码标准通常总是涉及对接口而不是具体类的编码
我想了一种方法,可以在不更改会导致许多编译问题以及违反我们标准的类型的情况下流式传输此列表
我的想法是有一个属性来读取 Meters 列表并转换为具体的类,然后在序列化时完全忽略 Meters
但是,XML 仍然需要将 Meters 作为元素名称
但是这不起作用
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Xml.Serialization;
public class MeterWalkOrder
{
public MeterWalkOrder()
{
Meters = new List<IMeter>();
}
public String Name { get; set; }
[XmlIgnore]
public List<IMeter> Meters { get; set; }
[XmlArrayItem(ElementName = "Meter")]
[XmlElement(ElementName = "Meters")]
public List<Meter> SerializableMeters
{
get
{
return Meters.Cast<Meter>().ToList();
}
set
{
Meters = new List<IMeter>(value);
}
}
}
}
有没有办法解决这个问题?
我的 XML(不能更改)在下面
<MeterWalkOrder>
<Name>Red Route</Name>
<Meters>
<Meter>
<MeterID>1</MeterID>
<SerialNumber>12345</SerialNumber>
</Meter>
<Meter>
<MeterID>2</MeterID>
<SerialNumber>SE</SerialNumber>
</Meter>
</Meters>
</MeterWalkOrder>
顶级错误是
反映类型“WindowsFormsApplication1.Classes.MeterWalkOrder”时出现错误。
内部异常是
{"XmlElement、XmlText 和 XmlAnyElement 不能与 XmlAttribute、XmlAnyAttribute、XmlArray 或 XmlArrayItem 一起使用。"}
我真的很想避免开创使用具体类列表的先例
【问题讨论】:
-
将
[XmlElement(ElementName = "Meters")]换成[XmlArray(ElementName = "Meters")]
标签: c# interface xml-serialization