这太......哈哈了?Xml到一个对象

jer*_*ley 4 c# xml

我正在玩我最喜欢的东西,xml(有礼貌地请你杀了我),最终的目标是将它保存在内部并以不同的方式使用数据(这是从另一个系统导出).我有goo有效,但是,我觉得它可以好多了.

    public Position(XElement element)
    {
        Id = element.GetElementByName("id");
        Title = element.GetElementByName("title");
    }
Run Code Online (Sandbox Code Playgroud)

我正在考虑通过为它所代表的xml元素添加数据注释来使其更加自动化(hacky).比如这样的东西.

    [XmlElement("id")]
    public string Id { get; set; }

    [XmlElement("title")]
    public string Title { get; set; }
Run Code Online (Sandbox Code Playgroud)

然后写一些反射/映射器代码,但两种方式都感觉......很脏.我应该关心吗?有没有更好的办法?也许反序列化是正确的方法?我只是觉得有一种方法可以做到这一点.

Wal*_*eza 13

您可以使用XmlSerializer类和使用属性标记类属性来控制对象的序列化和反序列化.

这是一个简单的方法,您可以使用它来反序列化您XDocument的对象:

public static T DeserializeXml<T>(XDocument document)
{
    using (var reader = document.CreateReader())
    {
        var serializer = new XmlSerializer(typeof (T));
        return (T) serializer.Deserialize(reader);
    }
}
Run Code Online (Sandbox Code Playgroud)

和一个简单的序列化方法:

public static String ToXml<T>(T instance)
{
    using (var output = new StringWriter(new StringBuilder()))
    {
        var serializer = new XmlSerializer(typeof(T));
        serializer.Serialize(output, instance);

        return output.ToString();
    }
}
Run Code Online (Sandbox Code Playgroud)