【发布时间】:2018-05-23 05:50:55
【问题描述】:
我正在尝试反序列化一个 xml 文件。获取结构但没有数据。请帮忙。
以下是我正在使用的文件/类:
1。 XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<Model
Content="ByBlock">
<Units>
<Unit
UnitCategory="acceleration"
Units="m/s2,cm/s2,ft/s2,g0" />
<Unit
UnitCategory="angle"
Units="radians,degrees,grads" />
</Units>
<Modules>
<Module
Module="ControlValve">
<Parameter
Name="ValveCharacteristic"
Type="Int">
<Enumeration
Tag="Parabolic"
Value="4" />
<Enumeration
Tag="Hyperbolic"
Value="5" />
</Parameter>
<Parameter
Name="ValveCvOption"
Type="Int">
<Enumeration
Tag="Set manually"
Value="0" />
<Enumeration
Tag="Set from valve type and size"
Value="1" />
</Parameter>
</Module>
<Module
Module="Drum">
<Parameter
Name="VesselOrientation"
Type="Int">
<Enumeration
Tag="Horizontal cylinder"
Value="0" />
<Enumeration
Tag="Vertical cylinder"
Value="1" />
</Parameter>
</Module>
</Modules>
<Blocks>
<Block
ID="0"
Module="Drum">
<Parameter
Name="Diameter"
Value="1000.000000"/>
<Parameter
Name="Length"
Value="4000.000000"/>
</Block>
<Block
ID="0"
Module="ContinuousFlowCompressor">
<Parameter
Name="NominalSpeed"
Value="8950.000000"/>
<Parameter
Name="NominalFlow"
Value="2.783039" />
</Block>
</Blocks>
</Model>
2:类:
一个。模型类:
[XmlRoot("Model")]
public class Model
{
[XmlAttribute(AttributeName = "Content")]
public string Content { get; set; }
[XmlArray("Units")]
[XmlArrayItem("Unit")]
public List<Unit> Units { get; set; }
[XmlArray("Modules")]
[XmlArrayItem("Module")]
public List<Module> Modules { get; set; }
[XmlArray("Blocks")]
[XmlArrayItem("Block")]
public List<Block> Blocks { get; set; }
}
b.单元类:
[XmlRoot(ElementName = "Unit")]
public class Unit
{
[XmlAttribute(AttributeName = "UnitCategory")]
public string UnitCategory { get; set; }
[XmlAttribute(AttributeName = "Units")]
public string Units { get; set; }
}
c。模块类:
[XmlRoot(ElementName = "Module")]
public class Module
{
[XmlAttribute(AttributeName = "Module")]
public string Modul { get; set; }
[XmlArrayItem("Parameter")]
public List<ModuleParameter> Parameters { get; set; }
}
d。模块参数类:
[XmlRoot(ElementName = "Parameter")]
public class ModuleParameter
{
[XmlAttribute(AttributeName = "Name")]
public string Name { get; set; }
[XmlAttribute(AttributeName = "Type")]
public string Type { get; set; }
[XmlArrayItem("Enumeration")]
public List<Enumeration> Enumerations { get; set; }
}
e。枚举类:
[XmlRoot(ElementName = "Enumeration")]
public class Enumeration
{
[XmlAttribute(AttributeName = "Tag")]
public string Tag { get; set; }
[XmlAttribute(AttributeName = "Value")]
public string Value { get; set; }
}
f。块类:
[XmlRoot(ElementName = "Block")]
public class Block
{
[XmlAttribute(AttributeName = "ID")]
public string ID { get; set; }
[XmlAttribute(AttributeName = "Module")]
public string Module { get; set; }
[XmlArrayItem("Parameter")]
public List<BlockParameter> Parameters { get; set; }
}
g. BlockParameter 类:
[XmlRoot(ElementName = "Parameter")]
public class BlockParameter
{
[XmlAttribute(AttributeName = "Name")]
public string Name { get; set; }
[XmlAttribute(AttributeName = "Value")]
public string Value { get; set; }
}
我正在使用下面的代码来反序列化 xml 文件:
var serializer = new XmlSerializer(typeof(Model));
using (FileStream fs = File.OpenRead(file))
{
var xmlClass = (Model)serializer.Deserialize(fs);
}
PS: 1. 请注意,我必须使用两个参数类:一个在模块中,另一个在块类中。 2. 我已将我的 XmlElement 修改为 XmlAttribute 以获取建议的属性,例如 Content、UnitCategory、Units 等。
【问题讨论】:
-
最好的调试方式是用示例数据填充类,然后序列化。然后将序列化的数据与xml进行比较。第一个明显的问题是内容是一个属性而不是一个元素。
-
这个 xml 是被序列化的还是只是一个示例 1?
-
谢谢@jdweng,我已经更正了那部分。但尚未在参数列表中获取数据。
标签: c# xml xml-serialization