gpt4 book ai didi

c# - XML 反序列化在 C# 中提供结构而非数据

转载 作者:太空宇宙 更新时间:2023-11-03 22:44:48 25 4
gpt4 key购买 nike

我正在尝试反序列化一个 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; }
}

单元类:

[XmlRoot(ElementName = "Unit")]
public class Unit
{
[XmlAttribute(AttributeName = "UnitCategory")]
public string UnitCategory { get; set; }
[XmlAttribute(AttributeName = "Units")]
public string Units { get; set; }
}

模块类:

[XmlRoot(ElementName = "Module")]
public class Module
{
[XmlAttribute(AttributeName = "Module")]
public string Modul { get; set; }

[XmlArrayItem("Parameter")]
public List<ModuleParameter> Parameters { get; set; }
}

模块参数类:

[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; }
}

枚举类:

[XmlRoot(ElementName = "Enumeration")]
public class Enumeration
{
[XmlAttribute(AttributeName = "Tag")]
public string Tag { get; set; }

[XmlAttribute(AttributeName = "Value")]
public string Value { get; set; }
}

block 类:

[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; }
}

block 参数类:

[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);
}

附言:1. 请注意,我必须使用两个参数类:一个在模块类中,另一个在 block 类中。2. 我已将我的 XmlElement 修改为 XmlAttribute,以获得建议的属性,如 Content、UnitCategory、Units 等。

最佳答案

更正一点,属性不是元素。
您可以找到其他事件

[XmlRoot("Model")]
public class Model
{
//[XmlElement(ElementName = "Content")]
[XmlAttribute(AttributeName = "Content")]
public string Content { get; set; }

您还可以添加一个空的 C# 文件并选择编辑 |特殊粘贴 | XML 作为类。不是最漂亮的代码,但至少它是有效的。比较有用。

关于c# - XML 反序列化在 C# 中提供结构而非数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50480701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com