反序列化 XML 属性“xsi:type”

2024-04-25

这是我第一次在 stackoverflow 上提问,也是第一次使用 xml 文件,所以我认为情况不会比这更糟糕了。 我需要反序列化一些长 XML,但困扰我的部分如下:

<CastleConfigSub xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/c5c.xsd" Format="1">
  <ConfigFile Name="EdgeDetection">
    <Interfaces>
      <Interface Name="EdgeDetectionModule">
        <Doc />
         <Functions>
          <Function Name="MonitorNoChanges">
            <Doc>This Function checks that no edge has been detected at the specified                    digital channel for a specific time in msec
            	1. DigitalChanelToWatch: This is the digital Input channel to monitor                      edges on it.
            	2. TimeOut: This is the monitoring Period for the edges on the digitial                    input channel.
            </Doc>
            <Args>
              <Arg xsi:type="ArgEnum" Name="DigitalChanelToWatch"                                      Enum="DigitalInChannelID" />
              <Arg xsi:type="ArgValue" Name="TimeOut" EncodedType="uint32"                               Unit="msec" />
            </Args>
           </Function>
          </Functions>
        </Interface>
      </Interfaces>
    </ConfigFile>
  </CastleConfigSub>
public class CastleConfigSub
{
    [XmlElement("Options")]
    public Options options = new Options();

    [XmlElement("ConfigFile")]
    public ConfigFile configFile= new ConfigFile();


} 
public class ConfigFile
{
    [XmlElement("Doc")]
    public string doc {get; set;} 
    [XmlElement("History")]
    public History history = new History();
    [XmlElement("Includes")]
    public Includes includes = new Includes();
    [XmlElement("Options")]
    public Options options = new Options();
    [XmlElement("DataTypes")]
    public DataTypes dataTypes = new DataTypes();

    [XmlArray("Interfaces")]
    [XmlArrayItem("Interface")]
    public List<Interface> interfaces = new List<Interface>();


}
 public class Interface
{
    [XmlAttribute("Name")]
    public string name="";
    [XmlElement("Doc")]
    [XmlArray("Functions")]
    [XmlArrayItem("Function")]
    public List<Function> functions = new List<Function>();
}
public class Function
{

    [XmlAttribute("Name")]
    public string name="";
    [XmlElement("Doc")]
    public string doc="";
    [XmlArray("Args")]
    [XmlArrayItem("Arg")]
    public List<Arg> args = new List<Arg>();
}
public class Arg
{
    [XmlAttribute ("xsi:type")]
    public string type = "";
    [XmlAttribute("Name")]
    public string name ="";
    [XmlAttribute("EncodedType")]
    public string encodedType="";
    [XmlAttribute("Enum")]
    public string enumName ="";
    [XmlAttribute("Unit")]
    public string unit="";

}

我知道一切都很混乱,但我无法做得更好:/。


请尝试这个:

public class CastleConfigSub
{
    public ConfigFile ConfigFile { get; set; }
    [XmlAttribute()]
    public byte Format { get; set; }
}
public class ConfigFile
{
    public List<Interface> Interfaces { get; set; }
    [XmlAttribute()]
    public string Name { get; set; }
}
public class Interface
{
    public object Doc { get; set; }
    public List<Function> Functions { get; set; }
    [XmlAttribute()]
    public string Name { get; set; }
}
public class Function
{
    public string Doc { get; set; }
    [XmlArrayItem("Arg")]
    public List<Arg> Args { get; set; }
    [XmlAttribute()]
    public string Name { get; set; }
}
[XmlInclude(typeof(ArgEnum))]
[XmlInclude(typeof(ArgValue))]
public class Arg
{
    [XmlAttribute()]
    public string Name { get; set; }
}
public class ArgEnum : Arg
{
    [XmlAttribute()]
    public string Enum { get; set; }
}
public class ArgValue : Arg
{
    [XmlAttribute()]
    public string EncodedType { get; set; }
    [XmlAttribute()]
    public string Unit { get; set; }
}

我不知道 Interface 和 Function 元素存在多少次。所以我制作了List集合。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

反序列化 XML 属性“xsi:type” 的相关文章

随机推荐