在日志结构中,我有一个状态列表,在每个状态中,有几个字段,每个字段都有一些属性。其中一些字段具有相同名称的属性,但具有不同的类型,即int与float。注意'时间戳'此特定示例中的属性:
public class DroneState
{
[XmlAttribute("timestamp")]
public int timestamp;
...
}
public class SensorState
{
[XmlAttribute("timestamp")]
public float timestamp;
...
}
public class CombinedState
{
[XmlElement("DroneState")]
public DroneState droneState = null;
[XmlElement("Sensor")]
public SensorState sensorState = null;
}
public class FlightLog
{
[XmlElement("States"), XmlArrayItem("State")]
public List<CombinedState> states = new List<CombinedState>();
public static void SaveToFile(FlightLog flightLog, string file)
{
XmlSerializer serializer = new XmlSerializer(typeof(FlightLog));
string xml = string.Empty;
// serialize and return string
using (StringWriter writer = new StringWriter())
{
serializer.Serialize(writer, flightLog);
xml = writer.ToString();
}
File.WriteAllText(file, xml);
}
}
使用此代码生成XML文档,我遇到以下异常:
InvalidOperationException:名为&#39; timestamp&#39;的XML属性来自命名空间&#39;&#39;已存在于当前范围内。使用XML属性为属性指定另一个XML名称或命名空间。
这是我本可以预期的,但我似乎无法解决它。无论我尝试为每个属性添加命名空间,它都会抱怨属性是在&#39;&#39;中分配的。命名空间。
确保每个timestamp属性都放在自己的命名空间中需要采取哪些步骤?
答案 0 :(得分:0)
您可以为不同的签名/类型提供不同的属性名称
var editor = CKEDITOR.replace( 'editor1', {});
editor.on( 'instanceReady', function( evt ) {
editor.on( 'dialogShow', function( evt ) {
evt.data.definition.dialog.hide();
});
editor.execCommand('find');
});
或timestampDrone / timestampSensor。
答案 1 :(得分:0)
在上面发布的代码中,没有定义实际问题。它编译并运行良好,我虽然这是我认为遇到的问题的最小例子。我发现问题的原因是2个字段写入相同的属性,这使得抛出异常的原因。这完全是由于我缺乏监督造成的。
提供问题的代码:
[XmlAttribute("timestamp")]
public long timestamp;
[Quite a bit of other members...]
[XmlAttribute("timestamp")]
public float acceleration;
让acceleration
成员写入适当的属性可以解决问题。