Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用属性的XML解析_C#_.net_Xml_Xml Serialization - Fatal编程技术网

C# 使用属性的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

我有基于XML的应用程序快捷键绑定配置。我需要解析它

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