Это мой первый запрос на stackoverflow, а также первый раз для работы с xml-файлами, поэтому я не думаю, что это может ухудшиться. мне нужно десериализации некоторые длинные XML, но часть Thats подслушивания меня заключается в следующем:Deserializing XML-атрибут 'xsi: type'
<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
\t 1. DigitalChanelToWatch: This is the digital Input channel to monitor edges on it.
\t 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="";
}
Я знаю, что Everthing так грязно, но я не мог сделать лучше: /.
Что конкретно это проблема? Вы можете использовать инструмент XSD.exe, поставляемый с инфраструктурой .net, для создания классов C# из файла XML (https://msdn.microsoft.com/en-us/library/x6c1kb0s(v=vs.110). ASPX). – PhillipH
D Вам действительно нужны интерфейсы и интерфейс? Что насчет «функций» и «функции». И «args» и «arg». Изменение XmlArrayItem на XmlElement удаляет эти повторяющиеся теги. – jdweng
@jdweng Да, они мне нужны, потому что это не полный xml-файл, полный xml-файл имеет много интерфейсов, функций и аргументов, поэтому я думаю, что мне это нужно. –