如何使用XmlSerializer动态地序列化XML

时间:2016-04-05 15:33:45

标签: c# xml serialization xml-serialization xmlserializer

这是我的XML结构:

<codelang1>
       <prox>prox dans la langue</prox>
       <libelle>libellé dans la langue</libelle>
       <descriptif>descriptif dans la langue</descriptif>
</codelang1>
<codelang2>
       <prox>prox dans la langue</prox>
       <libelle>libellé dans la langue</libelle>
       <descriptif>descriptif dans la langue</descriptif>
</codelang2>
...
<codelang...n>
       <libelle></libelle>
       ....
</codelang...n>

如何使用c#类序列化此XML? codelang改变了。

1 个答案:

答案 0 :(得分:0)

迟到但试试这个......

Usings

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;

public class Codelang
{
    public string prox { get; set; }
    public string libelle { get; set; }
    public string descriptif { get; set; }
}

代码

class Program
{
    static void Main(string[] args)
    {
        string xmlfilepath = @"xml.xml";
        XDocument xmlsrcdoc = XDocument.Load(xmlfilepath);
        List<Codelang> lstCodelang = new List<Codelang>();

        try
        {
            lstCodelang = xmlsrcdoc.Descendants()
                                       .Elements("prox")
                                       .Select(el => FromXElement<Codelang>(el.Parent))
                                       .ToList();

        }
        catch (Exception)
        {

            throw;
        }
    }

    public static T FromXElement<T>(XElement element) where T : class, new()
    {
        var typeOfT = typeof(T);
        T value = new T();
        foreach (var subElement in element.Elements())
        {
            var prop = typeOfT.GetProperty(subElement.Name.LocalName);
            if (prop != null)
            {
                prop.SetValue(value, subElement.Value);
            }
        }
        return value;
    }
}

XML

<root>
<codelang1>
       <prox>prox dans la langue 1</prox>
       <libelle>libellé dans la langue</libelle>
       <descriptif>descriptif dans la langue</descriptif>
</codelang1>
<codelang2>
       <prox>prox dans la langue 2</prox>
       <libelle>libellé dans la langue</libelle>
       <descriptif>descriptif dans la langue</descriptif>
</codelang2>
<codelang3>
       <prox>prox dans la langue 3</prox>
       <libelle>libellé dans la langue</libelle>
       <descriptif>descriptif dans la langue</descriptif>
</codelang3>
</root>

我正在从名为xml.xml的应用程序构建文件夹中的文件中读取XML到一个字符串...您需要从其他地方获取XML字符串或创建xml.xml文件并保存XML上面的代码工作