C# 使用属性的XML解析
我有基于XML的应用程序快捷键绑定配置。我需要解析它C# 使用属性的XML解析,c#,.net,xml,xml-serialization,C#,.net,Xml,Xml Serialization,我有基于XML的应用程序快捷键绑定配置。我需要解析它 <ShortcutBinding> <ShortcutHandler Name ="Retail.Application.Documents.Outcome.Presentation.OutcomePresenter"> <Shortcut Name="EditHeader"> <Key>CTRL</Key> <Key>F4</K
<ShortcutBinding>
<ShortcutHandler Name ="Retail.Application.Documents.Outcome.Presentation.OutcomePresenter">
<Shortcut Name="EditHeader">
<Key>CTRL</Key>
<Key>F4</Key>
</Shortcut>
<Shortcut Name="EditItem">
<Key>F4</Key>
</Shortcut>
</ShortcutHandler>
</ShortcutBinding>
控制键
F4
F4
我知道.Net具有将XML反序列化为对象的属性。
任何人都可以使用属性编写此类反序列化的完整示例。可能有用可能有用还有一个问题,如何将键从字符串表示形式转换为适当的枚举表示形式?所以我想take@DmitryMartovoi只需将密钥类型从
List
更改为List
,并确保将枚举名称存储在xml中。例如,CTRL
不是ConsoleKey
enum的有效枚举名。那么自定义转换器呢?@DmitryMartovoi在Shortcut
类上定义属性,该类将对从xml反序列化的字符串执行自定义逻辑。例如,public List ConsoleKeys{get{return Keys.Select(k=>(ConsoleKey)Enum.Parse(typeof(ConsoleKey),k)).ToList();}
还有一个问题,我如何将键从字符串表示转换为适当的枚举表示?所以我想take@DmitryMartovoi只需将密钥类型从List
更改为List
,并确保将枚举名称存储在xml中。例如,CTRL
不是ConsoleKey
enum的有效枚举名。那么自定义转换器呢?@DmitryMartovoi在Shortcut
类上定义属性,该类将对从xml反序列化的字符串执行自定义逻辑。例如,public List ConsoleKeys{get{return key.Select(k=>(ConsoleKey)Enum.Parse(typeof(ConsoleKey),k)).ToList();}
public class ShortcutBinding
{
public ShortcutHandler ShortcutHandler { get; set; }
}
public class ShortcutHandler
{
[XmlAttribute]
public string Name { get; set; }
[XmlElement("Shortcut")]
public List<Shortcut> Shortcuts { get; set; }
}
public class Shortcut
{
[XmlAttribute]
public string Name { get; set; }
[XmlElement("Key")]
public List<string> Keys { get; set; }
}
XmlSerializer serializer = new XmlSerializer(typeof(ShortcutBinding));
var binding = (ShortcutBinding)serializer.Deserialize(XmlReader.Create(path));